Come fare il debug in Magento

È capitato a chiunque di trovarsi davanti al proprio sito non funzionante, ma senza riuscire a capire da subito quale problema potesse essere causa del malfunzionamento, giusto?
Ecco qualche piccolo trucchetto per renderti la vita più facile con Magento!
- Leggi l'articolo, ti bastano solo 2 minuti, 25 secondi
Sei di fretta? Scarica il PDF e consultalo quando vuoi!
Sommario
1 I files di log |
2 Come leggere il file di log |
3 Come gestire le eccezioni |
4 Impostare una DEV MODE |
5 Commenti |
I files di log
La prima cosa da fare, senza dubbio, è attivare le funzioni di log. In questo modo, Magento scriverà gli eventuali errori generati ed altre informazioni utili in un file, con tanto di data, ora e punto in cui si è generato l’errore, così da poter risalire in un batter d’occhio alla causa dei malfunzionamenti.
Nell’articolo:
abbiamo già visto come fare, ma è sempre bene rinfrescarci la memoria, no?
Per abilitare il log degli errori, ti basta entrare nel backend di Magento ed andare su:
Sistema > Configurazione
nel menu in alto, e scegliere:
SVILUPPATORE
in basso, nel menu laterale. Nella tab:
IMPOSTAZIONI LOG
ti basta scegliere:
ABILITA
ed il gioco è fatto!
Da questo momento, gli errori generati da Magento verranno scritti nel file:
/var/log/system.log
mentre le semplici eccezioni saranno situate nel file:
/var/log/exception.log
Come leggere il file di log
Prendiamo ad esempio questo file di log di Magento ed analizziamolo insieme, per comprendere meglio come leggerlo:
2017-05-30T19:20:36+00:00 ERR (3): Notice: Undefined variable: search in /Applications/MAMP/Server/Magento/app/code/core/Mage/Catalog/controllers/CategoryController.php on line 44
2017-05-30T19:20:36+00:00 ERR (3): Warning: array_key_exists() expects parameter 2 to be array, null given in /Applications/MAMP/Server/Magento/app/code/core/Mage/Catalog/controllers/CategoryController.php on line 44
In questo esempio (generato ad-hoc per l’occasione), leggiamo per prima cosa la data ed ora in cui si è generata la riga di log.
Dopodiché, troveremo la descrizione didascalica dell’errore, con tanto di file (completo di percorso in cui reperirlo) in cui l’errore si è generato e perfino la riga esatta in cui cercare!
Come gestire le eccezioni
Quando per qualche oscuro motivo Magento genera un’eccezione, il comportamento predefinito della piattaforma rende ancora più oscuro il riuscire a scovarlo. Ma questo non deve essere una giustificazione a demordere o a deporre le armi. Lo scopo di un buon developer è quello di riuscire a trovare anche il più piccolo errore tra i più profondi meandri del codice e porvi rimedio!
Per quanti di voi stanno maledicendo il famigerato messaggio:
There has been an error processing your request
Exception printing is disabled by default for security reasons.
Error log record number: 1084660608081
ecco qualche dritta che potrà risparmiarvi un bel po’ di tempo.
Magento genera ad ogni eccezione un singolo file di log dedicato, che è possibile reperire nella cartella:
/var/report/{error_log_number}
Dove {error_log_number} è un identificativo che Magento genera e assegna di volta in volta all’errore che si è verificato.
Ancora una volta, è qui che potremo trovare informazioni utili per rimuovere il problema:
(
[demo] => demo
)
]”;i:1;s:1095:”#0 /Applications/MAMP/Server/Magento/app/code/core/Mage/Catalog/controllers/CategoryController.php(45): Mage::throwException(‘Key [1]\xC2\xA0not fo…’)
#1 /Applications/MAMP/Server/Magento/app/code/core/Mage/Catalog/controllers/CategoryController.php(121): Mage_Catalog_CategoryController->_initCatagory()
#2 /Applications/MAMP/Server/Magento/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Catalog_CategoryController->viewAction()
#3 /Applications/MAMP/Server/Magento/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch(‘view’)
#4 /Applications/MAMP/Server/Magento/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#5 /Applications/MAMP/Server/Magento/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#6 /Applications/MAMP/Server/Magento/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#7 /Applications/MAMP/Server/Magento/index.php(83): Mage::run(”, ‘store’)
#8 {main}”;s:3:”url”;s:19:”/index.php/men.html”;s:11:”script_name”;s:10:”/index.php”;s:4:”skin”;s:7:”default”;}
Nell’esempio (anche stavolta generato ad-hoc a scopo didattico), troviamo come prima riga l’errore che ha generato l’interruzione. Nel caso in esame, non è stato trovato l’indice [1] nell’array:
array( ‘demo’ => ‘demo’ ).
Inoltre, leggiamo anche stavolta il percorso completo del file in cui si è verificato l’errore:
/app/code/core/Mage/Catalog/controllers/CategoryController.php
esattamente alla riga (45).
Impostare una DEV MODE
Per chi volesse semplificarsi la vita in fase di sviluppo, ci sono una serie di impostazioni che consiglio vivamente di controllare per avere a portata di mano tutte le informazioni più importanti in caso di errori.
- Attivare il log degli errori (come descritto all’inizio della guida):
System > Configuration > Advanced > Developer > Log Settings > Enabled => Yes - Disabilitare tutte le cache di sistema:
System > Cache Management > Disable All - Effettuare una reindicizzazione dei dati:
System > Index Management > Reindex All - Abilitare la modalità sviluppo:
Aprire il file .htaccess presente nella root di Magento ed inserire:
SetEnv MAGE_IS_DEVELOPER_MODE “true” - Abilitare la visualizzazione degli errori PHP:
Aprire il file index.php presente nella root di Magento, ed alla riga (73) rimuovere il simbolo # all’inizio dell’istruzione:
ini_set( ‘display_errors’, 1 ); - Abilitare la modalità di visualizzazione in chiaro delle eccezioni:
Rinominare il file /errors/local.xml.sample in /errors/local.xml - Assicurati che files CSS e JavaScript non siano concatenati:
System > Configuration > Advanced > Developer > JavaScript Settings > Merge JavaScript Files => No e System > Configuration > Advanced > Developer > CSS Settings > Merge CSS Files => No
In pochi passaggi, il tuo Magento è configurato per semplificare le operazioni di debutto, rendendo le tue ore di sviluppo un po’ meno tortuose.
Ovviamente, non dimenticare di ripercorrere a ritroso questi passaggi quando tutto sarà pronto per la pubblicazio…
Buono sviluppo con Magento!