Frage

Mir ist klar, dass Sie Setup -Skripte für Ihr eigenes Modul verwenden können, indem Sie sie in der Datei etc/config.xml Ihres Moduls in der Modul deklarieren <global> Raum wie dieser:

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

Einige Module verwenden dann die Datei mysql4-install-0.0.1.php während andere benutzen install-0.0.1.php. Wann benutze ich den MySQL4 vor dem Dateinamen und wann benutze ich ihn nicht?

Was kann ich auch tun, wenn mein Setup -Skript nicht ausgeführt wird, um herauszufinden, warum es nicht so ist?

War es hilfreich?

Lösung

Von Magento 1.6 und nach oben müssen Sie MySQL4 aufgrund der zusätzlichen Support von Multi-RDBMS nicht mehr verwenden.

Um herauszufinden, warum es nicht ausgeführt wird, können Sie die Ausnahme oder das System.log überprüfen. Das Erstellen eines Installationsskripts ist jedoch ziemlich einfach.

Überprüfen Sie auch den Leitfaden von Alan Storm: http://alanstorm.com/magento_setup_resources

Andere Tipps

Als @erfan saif erhielt Magento seit 1.6 Multi-RDBMS-Unterstützung. Aber in der realen Welt weiß ich nur MySQL -Backends.

Es ist wichtig zu verstehen, dass Magento für unterschiedliche Backends unterschiedliche Installations-/Upgrade-/Datenskripte haben kann. Wenn Sie einen speziellen Indextyp wünschen, der von MySQL, jedoch nicht von Standard-SQL, unterstützt wird, können Sie ein MySQL4-Install-1.0.0.Php-Skript implementieren. Wenn Ihr Skript generisch ist, verwenden Sie install-1.0.0.php

Wenn Sie einen Blick auf mage_core_model_resource_setup werfen, kann ich zwei interessante Dinge finden:

  1. Sie können Ihre Dateien benennen (%s-)%S-Version. (Php | SQL)
  2. Wenn Sie zwei Installationsskripte (jedoch mit Datenskripten haben, ist es das gleiche (App/Code/Core/Mage/Core/Modell/Ressource/Setup.php: 520)) Magento bevorzugt das spezielle Skript gegenüber dem generischen Skript (als eins würde erwarten)

app/code/core/mage/core/model/ressource/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;
}

Seien Sie vorsichtig, wenn Sie Ihr Skript nennen .sql Es wird direkt in die Datenbank aufgerufen:

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

Was kann ich auch tun, wenn mein Setup -Skript nicht ausgeführt wird, um herauszufinden, warum es nicht so ist?

Ich bevorzuge einen Stempel ('SADF') zu Beginn meiner Installations-/Upgrade -Datei, da ich ihn mehrmals ausführen kann, wenn sie aufgerufen wird, damit ich überprüfen kann, ob alle von mir festgelegten Variablen korrekt sind, bevor etwas geändert wird in die Datenbank. Wenn ich das 'SADF' auf dem Bildschirm sehe, wird das Skript ausgeführt.

I Magento lädt (anstelle des SADF), es ist Zeit zu debuggen, meine beiden Standardfehler sind:

  1. Ich habe vergessen, das Skript zur Konfiguration hinzuzufügen
  2. Ich habe das Verzeichnis in sql/ vergessen, zB sql/install-1.0.0.php Anstatt von sql/my_module_setup/install-1.0.0.php

Und weil ich denke, dass es hier passt, seien Sie vorsichtig mit Ihren Variablennamen: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

AKTUALISIEREN@Rouven-Rieker fügte über Twitter hinzu, dass Daten- und Fehlende MySQL4- in Magento 1.6 hinzugefügt wurden. Wenn Sie Rückwärtskompatibilität benötigen, seien Sie vorsichtig!

Wenn Ihr Skript nicht ausgeführt wird, sollten Sie auch überprüfen, ob Ihre Module-Version mit der Version Ihres Setup-Skripts übereinstimmt.

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

Wenn Ihr Skript nicht ausgeführt wird, setzen Sie die Versionsnummer in Core_Resource und Flush Cache zurück. Magento Caches -Versionen im Voraus scheinen es zu sein, und es vermisst es, Setup -Skripte auszuführen, wenn alle Caches aktiviert sind. Da wir alle mit deaktiviertem Cache arbeiten, bemerken wir dies möglicherweise nicht, aber die Installation auf Live -Site über Upload funktioniert nicht, wenn Cache aktiviert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top