Home>Guide>Come fare il debug in Magento

Come fare il debug in Magento


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!
La guida fa riferimento alle versioni 1.9.x di Magento, precedenti rispetto all'attuale v2.x.x.

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: key 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): 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:

a:5:{i:0;s:61:”Key [1] not founded in array [Array
(
[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!



Ti è piaciuto questo articolo? Regalami un click per ripagarmi dello sforzo



Code4Life ti è stato utile? Sostienici con una donazione!

Dona con PayPal

Hai trovato interessante l’articolo? Allora ti consiglio di leggere:

A cosa servono gli attributi noopener e noreferrer?

A cosa servono gli attributi noopener e noreferrer?


Facciamo chiarezza sull’importanza dell’attributo rel="noopener noreferrer", utile per difendersi da una vulnerabilità da sempre trascurata ed utilizzata dai malintenzionati.

Come aggiornare gli indici su Magento

Come aggiornare gli indici su Magento


Lo scopo di questa breve guida è comprendere come Magento immagazzina le informazioni ed imparare a ricostruire gli indici in caso di necessità, per avere un catalogo sempre aggiornato.

Oppure cerca tra gli articoli correlati


E tu cosa ne pensi? Condividi la tua opinione e discutiamone insieme
La tua email non sarà resa pubblico o utilizzata per inviarti spam, te lo prometto

Iscrivimi alla newsletter per ricevere news ed aggiornamenti
Utilizziamo piattaforme di terze parti per l’invio di newsletter. (Privacy Policy)
Tienimi aggiornato su questo articolo
Ricevi una email di notifica quando qualcuno scriverà un commento a questo articolo. (Privacy Policy)
Ricorda i miei dati per la prossima volta che scriverò un commento
Il tuo nome e la tua email verranno salvati in un cookie in questo browser. (Privacy Policy)