Fundamentals per il debug di un negozio di Magento
-
16-10-2019 - |
Domanda
Come posso eseguire il debug il mio negozio Magento
Questa è una domanda che non è fin troppo rilevante per noi adesso, ma aveva un sito di Magento SE esisteva 5 anni fa, probabilmente sarebbe stata la nostra prima domanda. Per quelli appena entrare in Magento, o non hanno familiarità con esso - sapendo i fondamenti di debug possono essere la chiave per escludere la causa dei problemi. E nonostante la sua irrilevanza per noi ora stiamo anticipando questa domanda che appare con un approccio di auto-risposta.
Guida il mio sito è giù!
- E 'il mio disegno in colpa?
- è un modulo 3a parte in colpa?
- Perché non riesco a vedere l'errore?
Ciascuna di queste domande può essere facilmente risolta seguendo un approccio standardizzato per il debug che anche il più semplice degli utenti possono completare. Mediante un processo di eliminazione dei fondamenti di debug di un negozio Magento.
Soluzione
Debug è un po 'di un'arte, ma qualcosa che può essere facilmente acquistato padronanza seguendo un regime semplice.
Seguire ogni punto fino a quando finalmente arrivare ad una soluzione.
Abilita errori PHP
Questa è la chiave per la maggior parte dei problemi. Per ragioni di sicurezza o per altri motivi, visualizzazione di errore PHP potrebbe probabilmente essere disabilitato di default per la configurazione di PHP.
È possibile attivare gli errori con una soluzione più permanente, o semplicemente qualcosa di più temporanea.
soluzione permanente
Per Apache / mod_php utenti
Nel file di .htaccess
del vostro principale del documento -. Basta semplicemente inserire questo in cima
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_value error_log /home/path/public_html/var/log/system.log
utenti Per Nginx / FastCGI
Nella configurazione Nginx virtualhost, sia nella direttiva location .php {
finale, o nel file fastcgi_params
(se ne avete uno specificato)
fastcgi_param PHP_VALUE display_startup_errors=on;
fastcgi_param PHP_VALUE display_errors=on;
fastcgi_param PHP_VALUE html_errors=on;
fastcgi_param PHP_VALUE log_errors=on;
fastcgi_param PHP_VALUE error_log=/home/path/public_html/var/log/system.log;
Soluzione temporanea / Universal
Per qualsiasi piattaforma
Modifica il bootstrap index.php
Magento nella root dei documenti e rimuovere il commento la seguente riga:
#ini_set('display_errors', 1);
Attiva Developer modalità
Quando hai avuto un errore e improvvisamente ha colpito la pagina "Error Report", e stato dato uno stringa di errore apparentemente inutile come 1184257287824
-. Hai un paio di opzioni
soluzione permanente
Per Apache / mod_php utenti
Nel file di root .htaccess
documento -. Basta semplicemente inserire questo in cima
SetEnv MAGE_IS_DEVELOPER_MODE true
utenti Per Nginx / FastCGI
Nella configurazione Nginx virtualhost, sia nella direttiva location .php {
finale, o nel file fastcgi_params
(se ne avete uno specificato)
fastcgi_param MAGE_IS_DEVELOPER_MODE true;
Soluzione temporanea / Universal
Modifica il bootstrap index.php
Magento nella root dei documenti e sia fare la dichiarazione if
sempre vero, o abilitata per il vostro specifico IP.
if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) || true) {
Mage::setIsDeveloperMode(true);
}
o
if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) || $_SERVER['REMOTE_ADDR'] == 'my.ip.add.ress') {
Mage::setIsDeveloperMode(true);
}
controllare le autorizzazioni
Le autorizzazioni non corrette causerà una grande quantità di problemi, molti dei quali non sono così facili da trovare al primo sguardo.
Ad esempio.
Se il PHP non può scrivere nella directory./media
e si dispone di JS combinano abilitati - Magento è in grado di generare il file combinato e associato unico URI per i media. Così, invece, ciò che troverete nel codice sorgente del browser è un percorso server completo al file multimediale/home/path/public_html/media/xxx
In caso contrario, il sito può apparire fungere da normali - senza errori critici in realtà visibili
.Si prega di tenere a mente, questa pratica è sicuro per l'hosting dedicato, ma può presentare problemi di sicurezza con hosting condiviso, se il processo di Apache non è chroot per utente.
Nel nostro esempio, l'SSH / utente FTP è sonassi
, l'utente Apache è apache
e il gruppo è apache
Aggiungere l'utente FTP / SSH al gruppo Apache
La cosa più importante, abbiamo bisogno di fare in modo che il / utente SSH FTP fa parte del gruppo di Apache, nel nostro esempio, la sua apache
(ma è anche comunemente www-data
)
usermod -a -G apache sonassi
Mantenere l'aggiunta di più utenti al gruppo come si deve per FTP / SSH.
Ripristina permessi originali
Quindi, prima di iniziare, permette di assicurarsi che tutte le autorizzazioni siano corrette.
chown -R sonassi:apache /home/path/public_html/
find /home/path/public_html/ -type d -exec chmod 775 {} \;
find /home/path/public_html/ -type f -exec chmod 664 {} \;
Rendere permanenti le modifiche
ACL e Sticky Bit
ACL in Linux ci consentono di definire norme specifiche, nel nostro caso, quali file devono ereditare autorizzazioni al momento della creazione. Un po 'appiccicoso (citato in seguito) si prende cura di ereditarietà di gruppo, ma non aiuta con le autorizzazioni, motivo per cui usiamo le ACL.
Inizia attivando supporto ACL sulla partizione attiva, si prega di assicurare il vostro kernel è stato compilato con il supporto ACL .
Il tuopartizione può essere /
, /home
, /var
o qualcos'altro, sostituire a seconda del caso.
mount -o remount,acl /home
Ora ACL sono abilitate, siamo in grado di impostare le regole ACL e di gruppo sticky bit:
setfacl -d -m u::rwx,g::rwx,o::rx /home/path/public_html/
chmod g+s /home/path/public_html/
Ma io non ho il supporto ACL
Se il kernel non supporta ACL è possibile utilizzare anche umask
(che è un ambiente runtime per BASH, FTP e PHP) per impostare i permessi dei file di default. Magento solito imposta umask(0)
in index.php
, tuttavia, sarebbe nel vostro interesse a cambiare questo.
Nel vostro cambiamento index.php
la linea umask
di essere
umask(022);
E nel vostro ambiente BASH per SSH, impostare questa o nel vostro .bashrc
o .bash_profile
umask 022
Per il vostro server FTP, avrete bisogno di leggere la documentazione per esso, ma il principio è lo stesso.
Ripristina tema di default
E 'possibile che sia il tema o il pacchetto è responsabile di questo problema. Ripristino di nuovo ad un tema di vaniglia Magento è un modo rapido per scoprire.
** Questo avviene con l'avvertenza che alcuni moduli possono essere dipendente da certe caratteristiche a tema *
Invece di cambiare qualsiasi cosa tramite il pannello di amministrazione, è molto più semplice per rinominare solo le directory offendere.
Via SSH
mv ./app/design/frontend/myBrokenTheme{,.tmp}
mv ./skin/frontend/myBrokenTheme{,.tmp}
o tramite il vostro client FTP, traverse e rinominare il pacchetto a qualcos'altro. per esempio. myBrokenTheme.tmp
Se questo risolve il problema
allora avete bisogno di scavare un po 'più a fondo di ciò che parte del modello è problematico. Quindi ripristinare il pacchetto e tentare quanto segue, prova tra ogni.
In sostanza, il processo è quello di consentire a poco a poco le directory mentre attraversate l'albero di file -. Fino a quando è possibile trovare il file offendere
- Rinominare la directory layout per
.tmp
- Rinominare la directory modello per
.tmp
Poi, se entrambi i rendimenti di una correzione, rinominare tutti i file all'interno della directory layout per .tmp
- (per il ls | xargs -I {} mv {} {}.tmp
utenti SSH o rename 's/^/.tmp/' *
)
Poi gradualmente abilitare ogni file 1 da 1 fino a risoluzione.
Se questo non risolve il problema
Esiste la possibilità che i vostri base/default
o enterprise/default
directory sono diventati contaminati - e sono meglio sostituito con una versione pulita noto.
È possibile farlo scaricando una generazione pulita Magento e sostituendo le directory, se necessario. Via SSH si può fare questo:
cd /home/path/public_html/
mkdir clean_mage
cd clean_mage
MAGENTO_VERSION=1.7.0.0
wget -O magento.tgz http://www.magentocommerce.com/downloads/assets/$MAGENTO_VERSION/magento-$MAGENTO_VERSION.tar.gz
tar xvfz magento.tgz
cd /home/path/public_html/app/design/frontend
mv base{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/app/design/frontend/base .
cd /home/path/public_html/skin/frontend
mv base{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/skin/frontend/base .
Si può anche cogliere l'occasione per diff
le due directory, se si desidera verificare eventuali modifiche.
diff -r base base.tmp
NB. Questo metodo causerà più errori durante il processo, come vuole il modulo di dipendenza l'esistenza di file specifici. Purtroppo, la sua par per il corso.
Disattiva moduli locali
Per default, Magento definisce il PHP include percorso per classi di carico nel seguente ordine
Local > Community > Core
Se un file è in locale - carico e non più fare
. Se un file è in comunità - carico e non più fare
. Se un file non può essere trovato altrove - caricarlo dal nucleo.
Anche in questo caso, piuttosto che i moduli disabilitazione tramite pannello di amministrazione di Magento, è più pratico farlo a livello di file.
In genere, per disattivare un modulo il modo "corretto", è necessario modificare il rispettivo file ./app/etc/modules/MyModule.xml
e set <active>false</active>
-. Tuttavia, questo non impedisce in realtà una classe da carico
Se un'altra classe estende una data classe in un modulo (ignorando ogni dichiarazione di dipendenza Magento), sarà ancora essere caricato - indipendentemente dal fatto che l'estensione è disabilitato o non.
Quindi, di nuovo, il mezzo migliore per disabilitare un'estensione è quello di rinominare la directory.
Inizia disabilitando locale
Basta rinominare la directory tramite FTP, oppure utilizzare il comando seguente SSH
mv ./app/code/local{,.tmp}
comunità quindi disattivare
mv ./app/code/community{,.tmp}
Se il problema viene risolto da entrambi
Poi è un caso di comprensione quale modulo, in particolare, l'errore derivava da. Come nell'esempio sopra riportato, per la diagnosi pacchetto, lo stesso processo si applica.
Quindi, ripristinare la directory X e tentare quanto segue, prova tra ogni.
In sostanza, il processo è quello di consentire gradualmente directory (moduli) uno ad uno finché l'errore si verifica nuovamente
- Rinomina tutti i moduli nella directory di
.tmp
(per lals | xargs -I {} mv {} {}.tmp
utenti SSH orename 's/^/.tmp/' *
) - A poco a poco abilitare ciascun modulo one-by-one, rimuovendo
.tmp
dal nome del file
Se il problema non viene risolto
Quindi è possibile che il nucleo stesso è contaminato. Il nucleo principale Magento PHP consiste di
./ app / code /
nucleo ./lib
Quindi, di nuovo, rinominare queste directory e copiare in una variante pulita. Supponendo che hai già scaricato una versione pulita di Magento come sopra, tramite SSH, si può fare questo:
cd /home/path/public_html/app/code
mv core{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/app/code/core .
Poi, se il problema ancora non si risolve, sostituire la directory lib
troppo
cd /home/path/public_html
mv lib{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/lib .
A questo punto, il tuo negozio Magento sarà niente di più che un impianto di vaniglia con un database modificato.
Alcuni modelli sono in realtà ancora memorizzati nel database (ad esempio ordine di incremento.) - così a questo punto, diventa un caso di fare manualmente queste modifiche. Finora, tutti i passaggi precedenti sono stati reversibili senza danni permanenti. Ma se fossimo in un database di importazione Magento troppo pulita -. Potrebbe rivelarsi irreversibile (a corto di ripristino di un backup)
La guida di cui sopra serve per ottenere sul vostro modo di individuare un errore; Non a fissare l'errore risultante.
Contenuto volentieri provenienti da www.sonassi.com/knowledge-base/magento-debug -process e www.sonassi.com/knowledge-base/stop- Magento-permissions-errori-permanente
Altri suggerimenti
chiesto su Twitter e discusso su Meta inizierò qui un tutorial di debug per i non sviluppatori.
In primo luogo credo che (anche tu Magento cerca di coinvolgere questo) Magento è troppo complesso per un mercante senza team di sviluppo / sviluppo. Ma se siete coraggiosi e volete provarlo, stiamo dando del nostro meglio qui per aiutarvi. Credo che per alcune domande è il confine tra "come posso fare questo?" e "si prega di fare il mio lavoro, sono troppo stupido per Google" è una linea sottile abbastanza. Capisco che è spesso difficile, a Google pensa, perché non si sa cosa si sta googling per, perché non si conosce la denominazione ancora. Detto questo, cerchiamo di raccogliere le cose tutti con un negozio Magento può fare, anche tu (s) che sono gli sviluppatori.
Una risposta molto buona come eseguire il debug di Magento, quando si vuole sporcarsi era già dato da Sonassi , ma cerco di aggiungere le cose e copiare quello che penso è applicabile per i commercianti.
Disclaimer: Tutti i file e le directory menzionati in questo post sono relativo alla cartella principale magento, che potrebbe essere in
/var/www
ma a seconda del fornitore di hosting, la vostra cosiddetta documento root può essere ovunque, chiedete al vostro fornitore, se non trovate il vostro Magento!
Modalità di sviluppo
Si desidera avere veri e propri errori, non quella merda "Si è verificato un errore" pagina che Magento offre normalmente.
Grazie alla fontis.com per questa immagine.
Le relazioni, citate nella pagina può essere trovato in var/reports/<the_number>
Quando si attiva la modalità di sviluppo, Magento genera l'errore vero e proprio, questi errori possono soprattutto fuoriuscire le credenziali, come quelli per il database! Quindi, pensare prima di accenderlo sui server di produzione!
Aprire il file index.php
nella cartella principale di Magento, a seconda della versione, è trovare queste linee attorno alla riga 73:
if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) {
Mage::setIsDeveloperMode(true);
}
#ini_set('display_errors', 1);
Per ora attiva la modalità, è necessario modificare queste linee.
Se si conosce l'indirizzo IP (la maggior parte delle persone ottenere una nuova ogni 24 ore, almeno in Germania), Google ti aiuta a qui:
Il tuo indirizzo IP pubblico è 87.138.100.68
if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])
|| $_SERVER['REMOTE_ADDR'] == 'my.ip.add.ress'
) {
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
}
Se non si conosce il ip per qualsiasi motivo, è possibile mostrare gli errori per tutti.
#if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) || true) {
Mage::setIsDeveloperMode(true);
#}
ini_set('display_errors', 1);
Registrazione
Magento registra un sacco di roba in due file:
-
var/log/exception.log
-
var/log/system.log
Eccezioni vengono registrati sempre. Le esigenze di log di sistema per essere abilitati nel backend:
System > Configuration > Developer > Log
Set Enabled
su Sì e si vede più errori e messaggi di debug in system.log
e in exception.log
È un problema tema?
Hai il tuo tema, questo è configurato nel backend qui:
Sistema> Configurazione> design
Grazie ad kb.magenting.com per l'immagine
Qui è possibile configurare il pacchetto e il tema. Se volete provare a riprodurre l'errore nel default tema rimuovere tutto ciò dai campi di input. Fare clic su Salva e si vedere il tema Magento standard, come nel negozio demo , se si dispone di un negozio prima di 1.8 è possibile trovare uno screen-shot nel Magento Guida Community Edition l'utente
Se non è possibile riprodurre il problema nel tema di default, il tema è rotto, si prega di contattare il fornitore tema. Noi non diamo supporto per i temi di terze parti, in particolare quelle commerciali.
E adesso?
Nella domanda:
- descrivere cosa si sta facendo
- ciò errore viene generato
- è nulla nei file di log?
- forse uno screen-shot dell'errore
- Prima di tutto si dovrebbe attivare la modalità sviluppatore
- Si può anche consentire di visualizzare gli errori in index.php: ini_set ( 'display_errors', 1);
- Compila xDebug prolunga con qualsiasi IDE intelligente (PhpStrom / Eclipse)
- Disattiva il modulo personalizzato e 3 parti
- Controlla l'eccezione e log degli errori, risolvere gli errori elencati sul registro eccezione
- Controllare l'estensione curl e mcrypt deve essere caricato sul server
- Verificare le autorizzazioni cartelle e file chown -R sonassi: apache / home / percorso / public_html / find / home / percorso / public_html / tipo d exec chmod 775 {} \; find / home / percorso / public_html / -type f exec chmod 664 {} \;
- Aggiorna il permesso directory media e var 0777 se non impostato
- Avvia IDE (phpstrom), quindi impostare i punti di inizio debugger su index.php 10.Press F8 e andare seguente fino a che hai errore
Per usare procedura descritta sopra si dovrebbe ottenere gli errori sicuramente.
Debug Backtrace
Questa è la buona funzione per eseguire il debug la chiamata di funzione in Magento.
Aggiungi questa funzione in includes / config.php o creare nuovo file e mettere le tutte le funzioni comuni php utilizzato.
function back_trace($exit = true) { $call_back_methods = ''; $call_back_methods .= ''; $call_back_methods .= 'S.N.Function NameLine NumberFile Name'; $counter = 1; foreach (debug_backtrace() as $index => $data) { //if (0 == $index) continue; $call_back_methods .= '' . $counter++ . ''; $call_back_methods .= '' . $data['function'] . ''; $call_back_methods .= '' . $data['line'] . ''; $call_back_methods .= '' . $data['file'] . ''; } $call_back_methods .= ''; print $call_back_methods; if (true == $exit) exit; }
uscita sarà