Jak korzystać ze skryptów instalacyjnych dla swojego modułu?


22

Zdaję sobie sprawę, że możesz użyć skryptów instalacyjnych dla własnego modułu, deklarując je w pliku etc / config.xml modułu w <global>przestrzeni w następujący sposób:

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

Niektóre moduły następnie używają pliku, mysql4-install-0.0.1.phppodczas gdy inne używają install-0.0.1.php. Kiedy więc używam mysql4 przed nazwą pliku, a kiedy go nie używam?

Co też mogę zrobić, gdy mój skrypt instalacyjny nie działa, aby dowiedzieć się, dlaczego tak nie jest?


1
Upewnij się, że usunąłeś wpis w tabeli core_resource, aby ponownie uruchomić instalację.
Rick Kuipers

Oprócz innych odpowiedzi, interesujące może być przeczytanie magentocommerce.com/images/uploads/RDBMS_Guide2.pdf To jest od zespołu podstawowego i opisuje przemyślenia stojące za zmianami wprowadzonymi w 1.6 Myślę, że zawsze dobrze jest nie tylko wiedzieć, co ma zmienione, ale także dlaczego.
Celldweller

Odpowiedzi:


21

Od Magento 1.6 i nowszych nie musisz już używać mysql4 z powodu dodanej obsługi wielu RDBMS.

Aby dowiedzieć się, dlaczego nie działa, możesz sprawdzić wyjątek.log lub system.log, być może Magento nie mógł znaleźć klasy instalacji. Utworzenie skryptu instalacyjnego jest jednak dość proste.

Sprawdź także przewodnik Alana Storma: http://alanstorm.com/magento_setup_resources


11

Jako @erfan saif, magento ma obsługę wielu rdbms od wersji 1.6. Ale w prawdziwym świecie znam tylko backendy mysql.

Ważne jest, aby zrozumieć, że magento może mieć różne skrypty instalacji / aktualizacji / danych dla różnych backendów. Jeśli chcesz specjalnego typu indeksu obsługiwanego przez mysql, ale nie przez standardowy SQL, możesz zaimplementować skrypt mysql4-install-1.0.0.php. Jeśli twój skrypt jest ogólny, użyj install-1.0.0.php

Jeśli przyjrzysz się Mage_Core_Model_Resource_Setup, mogę znaleźć dwie interesujące rzeczy:

  1. Możesz nazwać swoje pliki (% s -)% s-VERSION. (Php | sql)
  2. Jeśli masz dwa skrypty instalacyjne (ale ze skryptami danych, jest to to samo (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento woli skrypt specjalistyczny niż skrypt ogólny (jako jeden oczekiwałby)

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;
}

Uważaj, jeśli nazwiesz skrypt .sql, jest on wywoływany bezpośrednio w bazie danych:

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

Co też mogę zrobić, gdy mój skrypt instalacyjny nie działa, aby dowiedzieć się, dlaczego tak nie jest?

Wolę matrycę („sadf”) na początku mojego pliku instalacyjnego / aktualizacyjnego, ponieważ mogę ją uruchomić wiele razy, jeśli zostanie wywołana, dzięki czemu mogę sprawdzić, czy wszystkie ustawione przeze mnie zmienne są poprawne, zanim cokolwiek zostanie zmienione w baza danych. Jeśli widzę „sadf” na ekranie, wiem, skrypt jest uruchomiony.

I ładuje magento (zamiast sadf), czas debugować, moje dwa standardowe błędy to:

  1. Zapomniałem dodać skrypt do konfiguracji
  2. Mam sql/zapomniany katalog , np. sql/install-1.0.0.phpZamiastsql/my_module_setup/install-1.0.0.php

A ponieważ myślę, że tu pasuje, uważaj na nazwy zmiennych: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

AKTUALIZACJA @ rouven-rieker dodana przez Twittera, że ​​dane - i brakujący mysql4 - zostały dodane w Magento 1.6. Jeśli potrzebujesz kompatybilności wstecznej, bądź ostrożny!


3

Jeśli twój skrypt nie działa, powinieneś również sprawdzić, czy wersja modułów odpowiada wersji skryptu instalacyjnego.

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

1

Jeśli skrypt nie działa, zresetuj numer wersji w core_resource i opróżnij pamięć podręczną. Wydaje się, że Magento z wyprzedzeniem buforuje wersje i nie uruchamia skryptów instalacyjnych, gdy wszystkie pamięci podręczne są włączone. Ponieważ wszyscy pracujemy z wyłączoną pamięcią podręczną, możemy tego nie zauważyć, ale instalacja na stronie Live przez przesyłanie nie będzie działać, jeśli pamięć podręczna jest włączona.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.