Bagaimana cara menggunakan skrip pengaturan untuk modul Anda?

22

Saya sadar, Anda dapat menggunakan skrip pengaturan untuk modul Anda sendiri dengan mendeklarasikannya di file etc / config.xml modul Anda di dalam <global>ruang seperti ini:

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

Beberapa modul kemudian menggunakan file mysql4-install-0.0.1.phpsedangkan yang lain menggunakan install-0.0.1.php. Jadi kapan saya menggunakan mysql4 di depan nama file dan kapan saya tidak menggunakannya?

Juga, apa yang bisa saya lakukan ketika skrip setup saya tidak berjalan untuk mencari tahu mengapa tidak?

mpaepper
sumber
1
Pastikan Anda menghapus entri Anda di tabel core_resource agar pengaturan Anda berjalan kembali.
Rick Kuipers
Selain jawaban lain, bisa jadi menarik untuk membaca magentocommerce.com/images/uploads/RDBMS_Guide2.pdf Ini dari Tim Inti dan menjelaskan pemikiran di balik perubahan yang dibuat dengan 1.6 Saya pikir itu selalu baik, tidak hanya untuk mengetahui apa yang telah berubah tetapi juga mengapa.
Celldweller

Jawaban:

21

Dari Magento 1.6 dan yang lebih tinggi, Anda tidak perlu menggunakan mysql4 lagi karena menambahkan dukungan multi-RDBMS.

Untuk mengetahui mengapa itu tidak berjalan, Anda dapat memeriksa exception.log atau system.log, mungkin Magento tidak dapat menemukan kelas pengaturan Anda. Membuat skrip instalasi cukup mudah.

Periksa juga panduan Alan Storm: http://alanstorm.com/magento_setup_resources

Erfan
sumber
11

Sebagai @erfan saif, magento mendapat dukungan multi-rdbms sejak 1.6. Tetapi di dunia nyata, saya hanya tahu backend mysql.

Penting untuk dipahami, bahwa magento dapat memiliki skrip instalasi / peningkatan / data yang berbeda untuk backend yang berbeda. Jika Anda menginginkan Tipe-Indeks khusus yang didukung oleh mysql tetapi tidak oleh standar-SQL Anda dapat mengimplementasikan skrip mysql4-install-1.0.0.php. Jika skrip Anda generik, gunakan install-1.0.0.php

Jika Anda melihat Mage_Core_Model_Resource_Setup saya dapat menemukan dua hal yang menarik:

  1. Anda dapat memberi nama file Anda (% s -)% s-VERSION. (Php | sql)
  2. Jika Anda memiliki dua skrip instalasi (tetapi dengan skrip data, skripnya sama (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) Magento lebih memilih skrip khusus daripada skrip generik (sebagai satu akan berharap)

app / code / core / Mage / Core / Model / Resource / 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;
}

Hati-hati, jika Anda memberi nama skrip Anda, skrip .sqlakan dipanggil langsung ke dalam basis data:

// 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);

Juga, apa yang bisa saya lakukan ketika skrip setup saya tidak berjalan untuk mencari tahu mengapa tidak?

Saya lebih suka die ('sadf') di awal file install / upgrade saya, karena saya bisa menjalankannya berkali-kali jika dipanggil, jadi saya bisa mengecek, apakah semua variabel yang saya atur sudah benar, sebelum ada yang berubah di data. Jika saya melihat 'sadf' di layar, saya tahu, skrip sedang berjalan.

Saya banyak memuat (bukan sadf), sekarang saatnya untuk debug, dua kesalahan standar saya adalah:

  1. Saya lupa untuk menambahkan skrip ke konfigurasi
  2. Direktori saya sql/lupa, misal sql/install-1.0.0.phpalih-alihsql/my_module_setup/install-1.0.0.php

Dan karena saya pikir cocok di sini, hati-hati dengan nama variabel Anda: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

UPDATE @ rouven-rieker menambahkan melalui twitter bahwa data- dan hilang mysql4- ditambahkan di magento 1.6. Jika Anda perlu kompatibilitas mundur hati-hati!

Fabian Blechschmidt
sumber
3

Jika skrip Anda tidak berjalan, Anda juga harus memeriksa apakah versi modul Anda cocok dengan versi skrip pengaturan Anda.

<modules>
    <Your_Module>
        <version>0.0.1</version>
    </Your_Module>
</modules> 
Anna Völkl
sumber
1

Jika skrip Anda tidak berjalan, setel ulang nomor versi di core_resource dan siram cache. Magento versi cache sebelumnya tampaknya dan tidak bisa menjalankan skrip pengaturan ketika semua cache diaktifkan. Karena kita semua bekerja dengan cache dinonaktifkan, kita mungkin tidak melihat ini, tetapi menginstal di situs Live melalui upload tidak akan berfungsi jika cache diaktifkan.

Petar Dzhambazov
sumber