Modülünüz için kurulum komut dosyaları nasıl kullanılır?


22

Farkındayım ki, kendi modülünüz için kurulum komut dosyalarını aşağıdaki gibi bir modülün etc / config.xml dosyasında bildirerek kullanabilirsiniz <global>:

<resources>
    <catalog_setup>
        <setup>
            <module>Mage_Catalog</module>
            <class>Mage_Catalog_Model_Resource_Setup</class>
        </setup>
    </catalog_setup>
</resources>

Bazı modüller daha sonra mysql4-install-0.0.1.phpdiğerlerini kullanırken dosyayı kullanır install-0.0.1.php. Peki, ne zaman mysql4'ü dosya adının önünde kullanırım ve ne zaman kullanmam?

Ayrıca, kurulum betiğimin neden olmadığını bulmak için çalışmadığında ne yapabilirim?


1
Kurulumunuzun tekrar çalıştırılması için core_resource tablosundaki girişinizi sildiğinizden emin olun.
Rick Kuipers

Diğer cevaplara ek olarak okumak için enteresan olabilir magentocommerce.com/images/uploads/RDBMS_Guide2.pdf Çekirdek Takımdan geliyor ve 1.6 ile yapılan değişikliklerin arkasındaki düşünceleri açıklıyor Ben sadece ne olduğunu bilmek her zaman iyi değil bence değişti ama aynı zamanda neden.
Celldweller

Yanıtlar:


21

Magento 1.6 ve üzeri sürümlerde, çoklu RDBMS desteği nedeniyle artık mysql4 kullanmanıza gerek yok.

Neden çalışmadığını öğrenmek için exception.log veya system.log dosyasını kontrol edebilirsiniz, belki Magento kurulum sınıfınızı bulamaz. Bir yükleme betiği oluşturmak olsa da oldukça basittir.

Ayrıca Alan Storm'un rehberine de bakınız: http://alanstorm.com/magento_setup_resources


11

@Erfan saif olarak, magento 1,6'dan beri multi-rdbms desteğini aldı. Ama gerçek dünyada sadece mysql arka uçları biliyorum.

Magento'nun farklı arka uçlar için farklı yükleme / yükseltme / veri komut dosyalarına sahip olabileceğini anlamak önemlidir. Eğer mysql tarafından desteklenen, ancak standart-SQL tarafından desteklenmeyen özel bir İndeks Tipi istiyorsanız, bir mysql4-install-1.0.0.php betiğini uygulayabilirsiniz. Komut dosyanız genelse, install-1.0.0.php dosyasını kullanın.

Mage_Core_Model_Resource_Setup'a bakarsanız iki ilginç şey bulabilirim:

  1. Dosyalarınızı adlandırabilirsiniz (% s -)% s-VERSION. (Php | sql)
  2. İki yükleme komut dosyanız varsa (ancak veri komut dosyalarıyla aynıysa (app / code / core / Mage / Çekirdek / Model / Kaynak / Kurulum.php: 520)) magento, özel komut dosyasını genel komut dosyasının üzerine seçer (biri olarak beklerdim)

Uygulama / kod / çekirdek / Mage / çekirdek / Modeli / kaynak / Setup.php: 488

$regExpDb   = sprintf('#^%s-(.*)\.(php|sql)$#i', $actionType);
$regExpType = sprintf('#^%s-%s-(.*)\.(php|sql)$#i', $resModel, $actionType);

while (false !== ($file = $handlerDir->read())) {
    $matches = array();
    if (preg_match($regExpDb, $file, $matches)) {
        $dbFiles[$matches[1]] = $filesDir . DS . $file;
    } else if (preg_match($regExpType, $file, $matches)) {
        $typeFiles[$matches[1]] = $filesDir . DS . $file;
    }
}
[...]
foreach ($typeFiles as $version => $file) {
    $dbFiles[$version] = $file;
}

Dikkat edin, eğer betiğinizi .sqladlandırırsanız, doğrudan veritabanına çağrılır:

// app/code/core/Mage/Core/Model/Resource/Setup.php:621
switch ($fileType) {
    case 'php':
        $conn   = $this->getConnection();
        $result = include $fileName;
        break;
    case 'sql':
        $sql = file_get_contents($fileName);
        if (!empty($sql)) {

            $result = $this->run($sql);

Ayrıca, kurulum betiğimin neden olmadığını bulmak için çalışmadığında ne yapabilirim?

Kurulum / yükseltme dosyamın başında bir die ('sadf') tercih ediyorum, çünkü çağrılırsa birden çok kez çalıştırabilirim, böylece bir şey değiştirilmeden önce, ayarladığım tüm değişkenlerin doğru olup olmadığını kontrol edebilirim. veritabanı. Ekranda 'sadf' görürsem, komut dosyası çalışıyordur.

Ben yüklerim (sadf yerine), hata ayıklama zamanı, iki standart hatam:

  1. Komut dosyasına config eklemeyi unuttum.
  2. Ben dizini var sql/unutulmuş, mesela sql/install-1.0.0.phpyerinesql/my_module_setup/install-1.0.0.php

Ve buraya uyduğunu düşündüğüm için değişken isimlerinize dikkat edin: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

UPDATE @ rouven-rieker, magento 1.6'ya veri ve kayıp mysql4'ün eklendiğini twitter yoluyla ekledi. Geriye doğru uyumluluk gerekiyorsa dikkatli olun!


3

Komut dosyanız çalışmıyorsa, modüller sürümünüzün kurulum komut dosyanızın sürümüyle aynı olup olmadığını da kontrol etmelisiniz.

<modules>
    <Your_Module>
        <version>0.0.1</version>
    </Your_Module>
</modules> 

1

Komut dosyanız çalışmıyorsa, core_resource'daki sürüm numarasını sıfırlayın ve önbelleği temizleyin. Magento sürümleri önceden önbelleğe alıyor gibi görünüyor ve tüm önbellekler etkin olduğunda kurulum komut dosyalarını çalıştırmayı özlüyor. Hepimiz önbellek devre dışıyken çalıştığımız için bunu fark etmeyebiliriz, ancak önbellek etkinse Canlı siteye yükleme yoluyla yükleme çalışmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.