Das Installationsskript meiner Magento-Erweiterung wird nicht ausgeführt
Lesezeit: 8 Minuten
Josh Pennington
Ich versuche, ein Installationsskript für meine Erweiterung zu erstellen, und aus irgendeinem Grund wird es das Installationsskript nicht. Die Erweiterung wird in der Tabelle „core_resource“ angezeigt, aber die Attribute, die ich zu erstellen versuche, werden nicht erstellt.
Ich bin mir ziemlich sicher, dass das Skript nicht einmal aufgerufen wird, weil ich am Anfang ein exit() gesetzt habe und die Seite einwandfrei lief.
Folgendes habe ich in meiner XML-Konfigurationsdatei. Dies wird in den globalen -> Ressourcenpfad eingefügt:
Stellen Sie sicher, dass die Groß-/Kleinschreibung Ihres Modulnamens in die gleiche Groß-/Kleinschreibung hat wie Ihr in Ihrer Ressourcenkonfiguration. Ich bin gerade selbst auf dieses Problem gestoßen.
– David Engel
16. Juli 2015 um 16:04 Uhr
Alan Sturm
Arbeiten Sie sich durch Dieser Beitrag um sicherzustellen, dass Sie keine Missverständnisse darüber haben, was die Setup-Ressourcen tun, wie sie funktionieren und wie Sie sie beheben können.
Sobald Sie das getan haben, klingt es nach allem, was Sie in diesem Frage-Thread gesagt haben, so, als würden Sie Ihre Ressource “installieren”, aber Ihr Installationsskript wird nie ausgeführt. Ich vermute, dass die Versionsnummer, die Sie in verwendet haben
//0.0.1 is your version number
mysql4-install-0.0.1.php
stimmte nicht mit der Version Ihres Moduls überein
Diese sollten übereinstimmen, damit das Skript ausgeführt werden kann. ich Überlegen Magento ist intelligent genug, frühere Versionen auszuführen, wenn es sie findet, aber der Code in den Setup-Ressourcen ist schwer nachzuvollziehen, daher stelle ich immer sicher, dass sie übereinstimmen.
Unabhängig davon können Sie wie folgt sehen, welche Datei(en) Magento auszuführen versucht, wenn es Ihre Setup-Ressource ausführt. Löschen Sie alle Einträge aus core_resource bezogen auf Ihr Modul. Löschen Sie Ihren Cache. Suchen Sie dann die folgenden Orte in der Setup-Klasse
app/code/core/Mage/Core/Model/Resource/Setup.php:
protected function _modifyResourceDb($actionType, $fromVersion, $toVersion)
{
...
$sqlFilesDir = Mage::getModuleDir('sql', $modName).DS.$this->_resourceName;
if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
return false;
}
...
$sqlDir->close();
if (empty($arrAvailableFiles)) {
return false;
}
...
$arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
if (empty($arrModifyFiles)) {
return false;
}
und ändern Sie sie dann, um einige temporäre Debugging-Ausnahmen hinzuzufügen
if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
throw new Exception("$sqlFilesDir not found");
return false;
}
...
if (empty($arrAvailableFiles)) {
throw new Exception("No files found to run");
return false;
}
...
$arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
if (empty($arrModifyFiles)) {
throw new Exception("No valid upgrade files found to run for ");
return false;
}
throw new Exception("If you're getting here, we have a file. Remove your exceptions here and place one in your installer to make sure it's the one you think it is.");
Laden Sie die Seite neu und Sie erhalten einen Ausnahmetext, der sich über alles beschwert, was Magento nicht finden kann. Das sollte ausreichen, um herauszufinden, welches Installationsskript Magento auszuführen versucht, aber nicht findet. Denken Sie daran, die Zeile Ihres Moduls in zu löschen core_resource und Ihren Cache zu löschen. (Magento speichert, welche Module auf eine Installation/ein Upgrade überprüft werden müssen)
Wenn das nicht funktioniert, fangen Sie an, sich mit der Logik von zu befassen applyAllDataUpdates und finden Sie heraus, warum die Klasse Ihre Installationsdatei nicht enthält.
Ihre Debugging-Methoden sagten mir, dass ich mein Skript im falschen Verzeichnis hatte. Ich danke dir sehr! Ich darf noch einen Tag weiterbeschäftigt werden!
– Josh Pennington
24. Januar 2011 um 13:41 Uhr
Tolle Antwort, Alan. Denken Sie nicht, dass es einen strengen Modus geben sollte, in dem Sie Magento sagen können, dass es sich bei Ihnen beschweren soll, wenn Sie versuchen, etwas einzurichten, und es nicht richtig eingerichtet ist? Aktualisieren Sie Skripte, Routen, Themen, es gibt alle möglichen Dinge, die beim ersten Mal schwer einzurichten sind, und es wäre großartig, wenn Sie Magento dazu bringen könnten, sich einfach bei Ihnen darüber zu beschweren, was genau das Problem ist. Ich denke, ein Modul, das dies tun würde, wäre großartig.
– Kalenjordan
29. August 2012 um 0:23 Uhr
Ich würde Sparcksoft zustimmen, dass Magento so lautlos scheitert, selbst ein Eintrag in eine Protokolldatei wäre die Mühe wert. Ich mag es immer noch nicht, wie Magento blind alles installiert, was ohne eine Art Prüfsumme übereinstimmt. Auch nur ein Tipp, von dem die meisten nicht wissen, dass Sie ihn verwenden können .sql anstatt .php für Ihre Installationsdateien, wenn Sie bei Updates/Installationen nur rohes SQL ausführen.
– B00MER
29. August 2012 um 23:17 Uhr
Vergessen Sie nicht, den Magento-Cache zu löschen. Auch wenn wir wissen, dass wir es tun sollten, ist es üblich, es zu vergessen!
Als ich auf dieses Problem stieß, musste ich den Cache deaktivieren. Nur spülen hat aus welchen Gründen auch immer nicht geholfen.
Punkt auf mateyyy
– Treten
4. Oktober 2016 um 14:24 Uhr
Jonathan-Tag
Der einfachste und informativste Weg, diesen Fehler aufzuspüren, besteht darin, Ihre IDE so einzurichten, dass sie Magento debuggt und einen Haltepunkt in Ihrer mysql4-install-0.0.1.php. Wenn der Haltepunkt nicht erreicht wird, wissen Sie, ob das Problem in Ihrer XML-Konfiguration liegt. Wenn der Haltepunkt erreicht wird, können Sie den Code nachverfolgen, um die Fehlerquelle zu finden.
Die Einrichtung kann einen halben Tag dauern, aber das Live-Debuggen von Magento ist bei weitem der beste Weg, um den Code zu lernen und zu verstehen. Tun Sie sich selbst einen Gefallen und investieren Sie jetzt.
Es sollte beachtet werden, dass Live-Debugging nicht möglich ist, wenn die Codebasis das Müll-IonCube-Zend-Modul verwendet (das viele schlecht entworfene Module von Drittanbietern erfordern).
– Lukas A. Leber
7. Dezember 2015 um 14:45 Uhr
Gem Magento-Wissensdatenbank Sie könnten versuchen, eine hinzuzufügen <class> tag in deinem <setup>. Auf diese Weise können Sie sicherstellen, dass das richtige Setup-Modell verwendet wird, und (falls es so weit kommt) das Modell an Ihr Installationsskript übergeben, wodurch die Notwendigkeit zum Erstellen einer $setup manuell.
Überprüfen Sie die Dateiberechtigungen des Installationsskripts und das Verzeichnis, in dem es sich befindet. Ich finde manchmal, dass ich den Datensatz lösche core_resources hilft auch dabei, den Prozess in Gang zu bringen.
Sie können in Magento überprüfen, welche Module geladen sind und welche Version dieses Moduls geladen ist:
Gehe zu app/code/core/Mage/Core/Model/Resource/Setup.php
Wenn diese Version gleich der Ressourcenversion von ist core_resources Tabellen-Upgrade-Skript wird nicht ausgeführt. Und die Version sollte mit dem Namen Ihres Upgrade-Skripts übereinstimmen
Etienne Renaud
Wir hatten das gleiche Problem für unseren Shop http://www.looxis.de
Um eine von uns verwendete Erweiterung zu aktualisieren, haben wir alle Dateien per FTP übertragen, aber die Datenbank hat sich nach dem Leeren des Caches nicht selbst aktualisiert. Die aktualisierte Erweiterung konnte also nicht ausgeführt werden, wir konnten uns nicht im Backend anmelden.
Auf der Suche nach einer Lösung sind wir auf diese Seite gestoßen.
Das Problem war, dass wir einige Wochen zuvor eine neuere Version des Moduls installiert hatten, die ebenfalls Fehler aufgrund eines Konflikts mit anderen Modulen produzierte, also haben wir einige Tabellen aus unserem Datenbank-Backup teilweise zurückübertragen und auch die alten Dateien zurückgelegt. alles funktionierte wieder,
Als wir versuchten, das Modul neu zu aktualisieren, das jetzt mit der anderen Erweiterung kompatibel war (Konflikt wurde entfernt), wurde das SQL-Update-Skript nicht ausgeführt.
Dies lag an der Tabelle „core_resources“. dort wurde die Versionsnummer des Moduls auf die neueste Version gesetzt, die wir Wochen zuvor installiert hatten – Magento würde also nicht erkennen, dass wieder ein neues Update durchgeführt wurde, sondern davon ausgehen, dass die neueste Version bereits vorhanden war.
Wir haben die Versionsnummer manuell auf eine niedrigere Version geändert, und boom, das Upgrade-Skript wurde gestartet und alles funktionierte einwandfrei!
8683600cookie-checkDas Installationsskript meiner Magento-Erweiterung wird nicht ausgeführtyes
Bitte poste den Speicherort deines Installationsskripts
– Joe Mastey
17. Januar 2011 um 23:04 Uhr
/app/code/local/Nie/Nie/sql/nie_setup/mysql4-install-0.0.1.php
– Josh Pennington
17. Januar 2011 um 23:26 Uhr
Stellen Sie sicher, dass die Groß-/Kleinschreibung Ihres Modulnamens in die gleiche Groß-/Kleinschreibung hat wie Ihr in Ihrer Ressourcenkonfiguration. Ich bin gerade selbst auf dieses Problem gestoßen.
– David Engel
16. Juli 2015 um 16:04 Uhr