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ù!

  1. E 'il mio disegno in colpa?
  2. è un modulo 3a parte in colpa?
  3. 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.

È stato utile?

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

  1. Rinominare la directory layout per .tmp
  2. 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

  1. Rinomina tutti i moduli nella directory di .tmp (per la ls | xargs -I {} mv {} {}.tmp utenti SSH o rename 's/^/.tmp/' *)
  2. 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. http://www.fontis.com.au/blog/magento/custom-magento-error-page

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

entrare descrizione dell'immagine qui

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

entrare descrizione dell'immagine qui

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?

Hai trovato un vero e proprio errore, si può riprodurre, è riproducibile in tema di default? Grande, si prega di aprire una domanda, e stiamo dando il nostro meglio per aiutare.

Nella domanda:

  • descrivere cosa si sta facendo
  • ciò errore viene generato
  • è nulla nei file di log?
  • forse uno screen-shot dell'errore
  1. Prima di tutto si dovrebbe attivare la modalità sviluppatore
  2. Si può anche consentire di visualizzare gli errori in index.php: ini_set ( 'display_errors', 1);
  3. Compila xDebug prolunga con qualsiasi IDE intelligente (PhpStrom / Eclipse)
  4. Disattiva il modulo personalizzato e 3 parti
  5. Controlla l'eccezione e log degli errori, risolvere gli errori elencati sul registro eccezione
  6. Controllare l'estensione curl e mcrypt deve essere caricato sul server
  7. 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 {} \;
  8. Aggiorna il permesso directory media e var 0777 se non impostato
  9. 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à

entrare descrizione dell'immagine qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top