Wie kann ich meinen Magento Store debuggen?
Dies ist eine Frage, die für uns derzeit nicht allzu relevant ist. Wenn es eine Magento SE-Site vor 5 Jahren gegeben hätte, wäre dies wahrscheinlich unsere erste Frage gewesen. Für diejenigen, die sich gerade erst mit Magento beschäftigen oder mit Magento noch nicht vertraut sind, kann die Kenntnis der Grundlagen des Debuggens entscheidend sein, um die Ursache von Problemen auszuschließen. Und obwohl es für uns jetzt irrelevant ist, bereiten wir diese Frage mit einem selbst beantworteten Ansatz vor.
Helfen Sie, meine Website ist down!
- Ist mein Design fehlerhaft?
- Ist ein Modul eines Drittanbieters fehlerhaft?
- Warum kann ich den Fehler nicht sehen?
Jede dieser Fragen kann leicht beantwortet werden, indem ein standardisierter Ansatz zum Debuggen verfolgt wird, den selbst die grundlegendsten Benutzer ausführen können. Durch einen Prozess der Beseitigung der Grundlagen des Debuggens eines Magento-Stores.
quelle
Antworten:
Das Debuggen ist eine Kunst, die sich jedoch leicht beherrschen lässt, wenn man einem einfachen Schema folgt.
Folgen Sie jedem Punkt, bis Sie eine Lösung gefunden haben.
Aktivieren Sie PHP-Fehler
Dies ist der Schlüssel zu den meisten Problemen. Aus Sicherheitsgründen oder aus anderen Gründen ist die Anzeige von PHP-Fehlern wahrscheinlich standardmäßig in Ihrer PHP-Konfiguration deaktiviert.
Sie können Fehler durch eine dauerhaftere Lösung oder nur durch eine temporärere Lösung aktivieren.
Permanente Lösung
Für Apache / mod_php Benutzer
In der
.htaccess
Datei Ihres Dokumentenstamms - legen Sie diese einfach oben ab.Für Nginx / FastCGI-Benutzer
In Ihrer Nginx virtualhost-Konfiguration, entweder in der finalen
location .php {
Anweisung oder in derfastcgi_params
Datei (falls Sie eine angegeben haben)Temporäre / universelle Lösung
Für jede Plattform
Bearbeiten Sie den Magento-Bootstrap
index.php
in Ihrem Dokumentenstamm und kommentieren Sie die folgende Zeile aus:Aktivieren Sie den Entwicklermodus
Wenn Sie einen Fehler hatten und plötzlich auf die Seite "Fehlerbericht" geklickt haben und eine scheinbar nutzlose Fehlerzeichenfolge erhalten haben, wie
1184257287824
- Sie haben ein paar Optionen.Permanente Lösung
Für Apache / mod_php Benutzer
In Ihrer Dokumentenstammdatei
.htaccess
- legen Sie dies einfach oben ab.Für Nginx / fastcgi Benutzer
In Ihrer Nginx virtualhost-Konfiguration, entweder in der finalen
location .php {
Anweisung oder in derfastcgi_params
Datei (falls Sie eine angegeben haben)Temporäre / universelle Lösung
Bearbeiten Sie den Magento-Bootstrap
index.php
in Ihrem Dokumentenstamm und geben Sie entweder dieif
Aussage immer wahr oder aktivieren Sie sie für Ihre spezifische IP.oder
Überprüfen Sie Ihre Berechtigungen
Falsche Berechtigungen verursachen eine Fülle von Problemen, von denen viele auf den ersten Blick nicht so einfach zu finden sind.
Andernfalls funktioniert die Site möglicherweise wie gewohnt - und es werden keine kritischen Fehler angezeigt.
Bitte beachten Sie, dass diese Vorgehensweise für dediziertes Hosting sicher ist, jedoch möglicherweise Sicherheitsprobleme beim gemeinsamen Hosting aufwirft, wenn der Apache-Prozess nicht pro Benutzer chrooted wird.
In unserem Beispiel ist der SSH / FTP-Benutzer
sonassi
, der Apache-Benutzerapache
und die Gruppeapache
Fügen Sie den FTP / SSH-Benutzer der Apache-Gruppe hinzu
Am wichtigsten ist , müssen wir sicherstellen , dass die FTP / SSH Benutzerteil der Apache - Gruppe ist, in unserem Beispiel sein
apache
( ist aber auch allgemeinwww-data
)Fügen Sie der Gruppe so viele Benutzer hinzu, wie Sie für FTP / SSH haben.
Ursprüngliche Berechtigungen zurücksetzen
Bevor wir beginnen, sollten wir sicherstellen, dass alle Berechtigungen korrekt sind.
Änderungen dauerhaft vornehmen
ACLs und Sticky Bits
Mit ACLs in Linux können wir bestimmte Regeln definieren, in unserem Fall, welche Berechtigungsdateien bei der Erstellung erben sollen. Ein Sticky-Bit (später erwähnt) kümmert sich um die Gruppenvererbung, hilft jedoch nicht mit den Berechtigungen, weshalb wir ACLs verwenden.
Beginnen Sie, indem Sie die ACL-Unterstützung auf der aktiven Partition aktivieren. Stellen Sie sicher , dass Ihr Kernel mit ACL-Unterstützung kompiliert wurde .
Ihre Partition kann sein
/
,/home
,/var
oder etwas anderes, ersetzen als angemessen.Wenn die ACLs aktiviert sind, können wir die ACL-Regeln festlegen und Sticky-Bits gruppieren:
Aber ich habe keine ACL-Unterstützung
Wenn Ihr Kernel keine ACLs unterstützt, können Sie auch
umask
(dies ist eine Laufzeiteinstellung für BASH, FTP und PHP) die Standarddateiberechtigungen festlegen. Magento setzt in der Regelumask(0)
inindex.php
, jedoch wäre es in Ihrem Interesse sein , dies zu ändern.In deinem
index.php
Wechsel soll dieumask
Leitung seinStellen Sie dies in Ihrer BASH-Umgebung für SSH entweder in Ihrer
.bashrc
oder in Ihrer ein.bash_profile
Für Ihren FTP-Server müssen Sie die Dokumentation lesen, das Prinzip ist jedoch dasselbe.
Thema auf Standard zurücksetzen
Möglicherweise ist entweder Ihr Thema oder Ihr Paket für dieses Problem verantwortlich. Wenn Sie zu einem Vanille-Magento-Thema zurückkehren, können Sie dies schnell herausfinden.
** Dies ist mit dem Vorbehalt verbunden, dass einige Module von bestimmten Themenfunktionen abhängig sein können *
Anstatt etwas über das Admin-Panel zu ändern, ist es viel einfacher, die fehlerhaften Verzeichnisse nur umzubenennen.
Über SSH
Oder über Ihren FTP-Client durchlaufen und benennen Sie Ihr Paket in etwas anderes. z.B.
myBrokenTheme.tmp
Wenn dies Ihr Problem behebt
Dann müssen Sie etwas genauer untersuchen, welcher Teil der Vorlage problematisch ist. Stellen Sie also Ihr Paket wieder her und versuchen Sie Folgendes, indem Sie zwischen den beiden Tests wechseln.
Im Wesentlichen müssen die Verzeichnisse beim Durchlaufen des Dateibaums nach und nach aktiviert werden, bis die fehlerhafte Datei gefunden wird.
.tmp
.tmp
Wenn sich dann eine Korrektur ergibt, benennen Sie alle Dateien im Layoutverzeichnis in
.tmp
- um (für die SSH-Benutzerls | xargs -I {} mv {} {}.tmp
oderrename 's/^/.tmp/' *
).Aktivieren Sie dann nach und nach jede Datei 1 für 1, bis sie aufgelöst ist.
Wenn dies Ihr Problem nicht löst
Es besteht die Möglichkeit, dass Ihre
base/default
oderenterprise/default
Verzeichnisse kontaminiert sind - und am besten durch eine bekannte saubere Version ersetzt werden.Sie können dies tun, indem Sie einen sauberen Build von Magento herunterladen und Ihre Verzeichnisse nach Bedarf ersetzen. Über SSH können Sie dies tun:
Sie können auch die Gelegenheit nutzen,
diff
die beiden Verzeichnisse zu durchsuchen, um Änderungen zu überprüfen.NB. Diese Methode führt während des Vorgangs zu mehr Fehlern, da die Modulabhängigkeit das Vorhandensein bestimmter Dateien vorschreibt. Leider ist es das Gleiche für den Kurs.
Deaktivieren Sie lokale Module
Standardmäßig definiert Magento den PHP-Include-Pfad zum Laden von Klassen in der folgenden Reihenfolge
Anstatt Module über das Magento Admin Panel zu deaktivieren, ist es auch hier praktischer, dies auf Dateiebene zu tun.
Um ein Modul auf die "richtige" Weise zu deaktivieren, müssen Sie normalerweise die entsprechende
./app/etc/modules/MyModule.xml
Datei bearbeiten und festlegen<active>false</active>
. Dies verhindert jedoch nicht, dass eine Klasse geladen wird.Wenn eine andere Klasse eine bestimmte Klasse in einem Modul erweitert (wobei alle Magento-Abhängigkeitsdeklarationen ignoriert werden), wird diese weiterhin geladen - unabhängig davon, ob die Erweiterung deaktiviert ist oder nicht.
Das beste Mittel zum Deaktivieren einer Erweiterung ist das Umbenennen des Verzeichnisses.
Deaktivieren Sie zunächst local
Benennen Sie das Verzeichnis einfach über FTP um oder verwenden Sie den folgenden SSH-Befehl
Dann deaktiviere die Community
Wenn das Problem von einem der beiden behoben ist
Dann gilt es zu verstehen, aus welchem Modul insbesondere der Fehler stammt. Wie im obigen Beispiel für die Paketdiagnose gilt der gleiche Vorgang.
Stellen Sie also das X-Verzeichnis wieder her und versuchen Sie Folgendes, indem Sie zwischen den beiden testen.
Im Wesentlichen müssen die Verzeichnisse (Module) nach und nach einzeln aktiviert werden, bis der Fehler erneut auftritt
.tmp
(für die SSH-Benutzerls | xargs -I {} mv {} {}.tmp
oderrename 's/^/.tmp/' *
).tmp
aus dem Dateinamen entfernenWenn das Problem nicht behoben ist
Dann ist es möglich, dass der Kern selbst kontaminiert ist. Der Hauptkern von Magento PHP besteht aus
Benennen Sie diese Verzeichnisse erneut um und kopieren Sie sie in einer sauberen Variante. Vorausgesetzt, Sie haben bereits eine saubere Version von Magento wie oben über SSH heruntergeladen, können Sie dies tun:
Wenn das Problem weiterhin besteht, ersetzen Sie auch das
lib
VerzeichnisZu diesem Zeitpunkt ist Ihr Magento-Shop nichts anderes als eine Vanille-Installation mit einer geänderten Datenbank.
Einige Modelle sind tatsächlich noch in der Datenbank gespeichert (z. B. Auftragsinkrement). Daher müssen diese Änderungen an dieser Stelle manuell vorgenommen werden. Bisher konnten alle oben genannten Schritte ohne dauerhaften Schaden rückgängig gemacht werden. Wenn wir aber auch eine saubere Magento-Datenbank importieren würden, könnte sich dies als irreversibel erweisen (wenn nicht nur ein Backup wiederhergestellt wird).
Die obige Anleitung soll Sie auf den Weg bringen, einen Fehler zu identifizieren. den resultierenden Fehler nicht zu beheben.
Inhalte stammen bereitwillig von www.sonassi.com/knowledge-base/magento-debug-process und www.sonassi.com/knowledge-base/stop-magento-permissions-errermanently
quelle
755
und644
Berechtigungen? Oder haben Sie einen besonderen Grund zu empfehlen775
und664
?rwx
für Eigentümer gelten, da die Gruppe und alle anderen nicht relevant sind. Aber wie bereits erwähnt - nicht jeder konfiguriert seinen Server ordnungsgemäß (tatsächlich nur sehr wenige) - und es besteht die Möglichkeit, dass sich der Apache / Nginx / PHP-Benutzer von dem des SSH / FTP-Benutzers unterscheidet und sich gegenseitig hinzufügt Jede jeweilige Gruppe erlaubt dann jedem,rwx
Dateien so zu speichern, wie sie können sollten.Wie auf Twitter angefordert und auf Meta diskutiert, beginne ich hier ein Debug-Tutorial für Nicht-Entwickler.
Zuerst denke ich (auch wenn Magento versucht, dies zu tun), Magento ist zu komplex für einen Händler ohne Entwickler- / Entwicklungsteam. Aber wenn Sie mutig sind und es versuchen möchten, geben wir hier unser Bestes, um Ihnen zu helfen. Ich denke bei einigen Fragen ist die Grenze zwischen "Wie kann ich das machen?" und "Bitte mach meine Arbeit, ich bin zu dumm, um das zu googeln" ist eine ziemlich feine Linie. Ich verstehe, dass es oft schwierig ist, über Google nachzudenken, weil Sie nicht wissen, wonach Sie googeln, weil Sie die Benennung noch nicht kennen. Sammeln wir also Dinge, die jeder mit einem Magento-Store machen kann, auch wenn er kein Entwickler ist.
Eine sehr gute Antwort, wie man Magento debuggt, wenn man schmutzig werden will, wurde bereits von Sonassi gegeben , aber ich versuche, Dinge hinzuzufügen und zu kopieren, was meiner Meinung nach für Händler gilt.
Entwicklungsmodus
Sie möchten echte Fehler haben, nicht die beschissene Seite "Ein Fehler ist aufgetreten", die Magento normalerweise liefert.
Vielen Dank an fontis.com für dieses Bild.
Die auf der Seite genannten Berichte finden Sie in
var/reports/<the_number>
Wenn Sie den Entwicklungsmodus aktivieren, löst Magento einen echten Fehler aus. Durch diese Fehler können insbesondere Anmeldeinformationen wie die für die Datenbank verloren gehen! Denken Sie also nach, bevor Sie es auf Produktionsservern einschalten!
Öffne deine
index.php
Datei im Hauptordner von Magento. Abhängig von der Version findest du diese Zeilen um die Zeile 73 herum:Um nun den Modus zu aktivieren, müssen Sie diese Zeilen ändern.
Wenn Sie Ihre IP-Adresse kennen (die meisten Leute bekommen alle 24 Stunden eine neue, zumindest in Deutschland), hilft Ihnen Google hier:
Wenn Sie Ihre IP aus irgendeinem Grund nicht kennen, können Sie Fehler für alle anzeigen.
Protokollierung
Magento protokolliert viele Dinge in zwei Dateien:
var/log/exception.log
var/log/system.log
Ausnahmen werden immer protokolliert. Das Systemprotokoll muss im Backend aktiviert sein:
Stellen Sie
Enabled
Ja ein und Sie sehen mehr Fehler und Debug-Meldungen insystem.log
und inexception.log
Ist es ein Thema Problem?
Sie haben ein eigenes Theme, dieses wird im Backend hier konfiguriert:
System> Konfiguration> Design
Vielen Dank an kb.magenting.com für das Bild
Hier können Sie das Paket und das Thema konfigurieren. Wenn Sie versuchen möchten, den Fehler im Standarddesign zu reproduzieren, entfernen Sie alles aus den Eingabefeldern. Klicken Sie dann auf Speichern und Sie sehen das Standardmagento-Thema wie im Demo-Shop . Wenn Sie einen Shop vor 1.8 haben, finden Sie einen Screenshot im Magento Community Edition-Benutzerhandbuch
Wenn Sie das Problem im Standarddesign nicht reproduzieren können, ist Ihr Design defekt, wenden Sie sich an den Hersteller des Designs. Wir unterstützen keine Themen von Drittanbietern, insbesondere keine kommerziellen.
Was jetzt?
Sie haben einen echten Fehler gefunden, den man reproduzieren kann, der im Standard-Theme reproduzierbar ist? Gut, bitte öffnen Sie eine Frage, und wir geben unser Bestes, um Ihnen zu helfen.
In der Frage:
quelle
Für die Verwendung der obigen Schritte sollten Sie auf jeden Fall Fehler erhalten.
quelle
Debug-Backtrace
Dies ist die gute Funktion, um den Funktionsaufruf in Magento zu debuggen.
Füge diese Funktion in der Datei includes / config.php hinzu oder erstelle eine neue Datei und füge alle gängigen PHP-Funktionen hinzu.
OutPut wird sein
quelle