Comment puis-je déboguer mon magasin Magento
C’est une question qui ne nous concerne plus beaucoup à présent, mais si un site Magento SE avait existé il ya 5 ans, c’était probablement notre première question. Pour ceux qui débutent dans Magento ou ne le connaissent pas - connaître les bases du débogage peut être un élément clé pour éliminer la cause des problèmes. Et malgré son manque de pertinence pour nous maintenant, nous anticipons cette question en apparaissant avec une approche à réponse automatique.
Aide mon site est en panne!
- Ma conception est-elle en cause?
- Un module tiers est-il en cause?
- Pourquoi je ne vois pas l'erreur?
Il est facile de répondre à chacune de ces questions en suivant une approche normalisée de débogage que même les utilisateurs les plus élémentaires peuvent résoudre. Au moyen d’un processus d’élimination des bases du débogage d’un magasin Magento.
extensions
core
debug
theme
Ben Lessani - Sonassi
la source
la source
Réponses:
Le débogage est un art, mais vous pouvez facilement le maîtriser en suivant un schéma simple.
Suivez chaque point jusqu'à ce que vous arriviez enfin à une solution.
Activer les erreurs PHP
C'est la clé de la plupart des problèmes. Pour des raisons de sécurité ou pour d’autres raisons, l’affichage des erreurs PHP pourrait probablement être désactivé par défaut avec votre configuration PHP.
Vous pouvez activer les erreurs avec une solution plus permanente ou simplement quelque chose de plus temporaire.
Solution permanente
Pour les utilisateurs d'Apache / mod_php
Dans le
.htaccess
fichier racine de votre document - il suffit de déposer ceci en haut.Pour les utilisateurs de Nginx / FastCGI
Dans votre configuration virtualhost Nginx, dans la
location .php {
directive finale ou dans lefastcgi_params
fichier (si vous en avez spécifié un)Solution temporaire / universelle
Pour toute plate-forme
Editez le bootstrap Magento
index.php
dans la racine de votre document et décommentez la ligne suivante:Activer le mode développeur
Lorsque vous avez eu une erreur et que vous avez soudainement frappé la page "Rapport d'erreur", une chaîne d'erreur apparemment inutile
1184257287824
vous a été donnée - vous avez plusieurs options.Solution permanente
Pour les utilisateurs d'Apache / mod_php
Dans votre
.htaccess
fichier racine de document - il suffit de déposer ceci en haut.Pour les utilisateurs de Nginx / fastcgi
Dans votre configuration virtualhost Nginx, dans la
location .php {
directive finale ou dans lefastcgi_params
fichier (si vous en avez spécifié un)Solution temporaire / universelle
Editez le bootstrap Magento
index.php
dans la racine de votre document et faites en sorte que laif
déclaration soit toujours vraie ou soit activée pour votre adresse IP spécifique.ou
Vérifiez vos autorisations
Des autorisations incorrectes entraîneront une multitude de problèmes, dont beaucoup ne sont pas faciles à trouver au premier abord.
Sinon, le site peut sembler fonctionner normalement - sans erreur critique réellement visible.
N'oubliez pas que cette pratique est sécurisée pour l'hébergement dédié, mais qu'elle peut poser des problèmes de sécurité avec l'hébergement partagé si le processus Apache n'est pas modifié par utilisateur.
Dans notre exemple, l’utilisateur SSH / FTP est
sonassi
, l’utilisateur Apache estapache
et le groupe estapache
Ajouter l'utilisateur FTP / SSH au groupe Apache
Plus important encore, nous devons nous assurer que l’utilisateur FTP / SSH fait partie du groupe Apache. Dans notre exemple, c’est
apache
(mais c’est aussi courammentwww-data
)Continuez à ajouter autant d'utilisateurs au groupe que vous avez pour FTP / SSH.
Réinitialiser les autorisations d'origine
Donc, avant de commencer, vérifions que toutes les autorisations sont correctes.
Rendre les changements permanents
ACL et Sticky Bits
Les listes de contrôle d'accès sous Linux nous permettent de définir des règles spécifiques, dans notre cas, les fichiers d'autorisations qui doivent hériter à la création. Un sticky bit (mentionné plus tard) prend en charge l'héritage de groupe, mais n'aide pas avec les autorisations, c'est pourquoi nous utilisons des ACL.
Commencez par activer le support ACL sur la partition active, assurez-vous que votre noyau a été compilé avec le support ACL .
Votre partition peut être
/
,/home
,/var
ou quelque chose d' autre, remplacer le cas échéant.Maintenant que les listes de contrôle d'accès sont activées, nous pouvons définir les règles de la liste de contrôle d'accès et regrouper les sticky bits:
Mais je n'ai pas de support ACL
Si votre noyau ne prend pas en charge les listes de contrôle d'accès, vous pouvez également utiliser
umask
(ce qui correspond à un paramètre d'exécution pour BASH, FTP et PHP) pour définir les autorisations de fichier par défaut. Magento met généralementumask(0)
enindex.php
, cependant, il serait dans votre intérêt de changer cela.Dans votre
index.php
changement laumask
ligne à êtreEt dans votre environnement BASH pour SSH, définissez-le dans votre
.bashrc
ou.bash_profile
Pour votre serveur FTP, vous devrez lire la documentation correspondante, mais le principe est le même.
Rétablir le thème par défaut
Il est possible que votre thème ou votre package soit responsable de ce problème. Revenir à un thème vanillé de Magento est un moyen rapide de le découvrir.
** Cela vient avec la mise en garde que certains modules peuvent dépendre de certaines fonctionnalités de thème *
Plutôt que de changer quoi que ce soit via le panneau d'administration, il est beaucoup plus simple de simplement renommer les répertoires incriminés.
Via SSH
Ou via votre client FTP, traversez et renommez votre paquet en quelque chose d'autre. par exemple.
myBrokenTheme.tmp
Si cela résout votre problème
Ensuite, vous devez approfondir un peu la question de savoir quelle partie du modèle pose problème. Donc, restaurez votre paquet et essayez ce qui suit, en testant entre chacun.
Le processus consiste essentiellement à activer progressivement les répertoires au fur et à mesure que vous parcourez l’arborescence de fichiers - jusqu’à ce que vous puissiez trouver le fichier incriminé.
.tmp
.tmp
Ensuite, si l'un des correctifs est corrigé, renommez tous les fichiers du répertoire de présentation en
.tmp
- (pour les utilisateurs SSHls | xargs -I {} mv {} {}.tmp
ourename 's/^/.tmp/' *
)Ensuite, activez progressivement chaque fichier 1 par 1 jusqu'à ce qu'il soit résolu.
Si cela ne résout pas votre problème
Il est possible que votre
base/default
ou vosenterprise/default
annuaires soient contaminés et qu’ils soient remplacés par une version propre connue.Vous pouvez le faire en téléchargeant une version propre de Magento et en remplaçant vos répertoires si nécessaire. Via SSH, vous pouvez faire ceci:
Vous pouvez également profiter des
diff
deux répertoires si vous souhaitez vérifier les modifications.NB Cette méthode entraînera davantage d'erreurs au cours du processus, car la dépendance du module dicte l'existence de fichiers spécifiques. Malheureusement, c'est la normale pour le cours.
Désactiver les modules locaux
Par défaut, Magento définit le chemin d’inclusion PHP pour charger les classes dans l’ordre suivant
Encore une fois, plutôt que de désactiver les modules via le panneau d’administration de Magento, il est plus pratique de le faire au niveau du fichier.
Généralement, pour désactiver un module de la manière "appropriée", vous devez éditer le
./app/etc/modules/MyModule.xml
fichier et le fichier respectifs<active>false</active>
. Toutefois, cela n’empêche pas le chargement d’une classe.Si une autre classe étend une classe donnée dans un module (en ignorant les déclarations de dépendance Magento), elle sera toujours chargée, que l'extension soit désactivée ou non.
Encore une fois, le meilleur moyen de désactiver une extension est de renommer le répertoire.
Commencez par désactiver le local
Renommez simplement le répertoire via FTP ou utilisez la commande SSH suivante
Puis désactiver la communauté
Si le problème est résolu depuis
Il s’agit ensuite de comprendre de quel module en particulier l’erreur provient. Comme avec l'exemple donné ci-dessus pour le diagnostic du colis, le même processus s'applique.
Donc, restaurez le répertoire X et essayez ce qui suit en testant entre eux.
Essentiellement, le processus consiste à activer progressivement les répertoires (modules) un par un jusqu'à ce que l'erreur se reproduise.
.tmp
(pour les utilisateurs SSHls | xargs -I {} mv {} {}.tmp
ourename 's/^/.tmp/' *
).tmp
le nom du fichierSi le problème n'est pas résolu
Il est alors possible que le noyau lui-même soit contaminé. Le noyau principal de Magento PHP est composé de
Encore une fois, renommez ces répertoires et copiez-les dans une variante propre. En supposant que vous ayez déjà téléchargé une version propre de Magento comme ci-dessus, via SSH, vous pouvez le faire:
Ensuite, si le problème persiste, remplacez également le
lib
répertoire.À ce stade, votre boutique Magento ne sera plus qu'une installation vanille avec une base de données modifiée.
En fait, certains modèles sont toujours stockés dans la base de données (par exemple, incrément de commande). À ce stade, il devient alors nécessaire d’effectuer ces modifications manuellement. Jusqu'à présent, toutes les étapes ci-dessus ont été réversibles sans dommages durables. Mais si nous importions également une base de données propre Magento, elle pourrait être irréversible (à moins de restaurer une sauvegarde).
Le guide ci-dessus vous aide à identifier une erreur; ne pas réparer l'erreur qui en résulte.
Le contenu provient volontairement de www.sonassi.com/knowledge-base/magento-debug-process et www.sonassi.com/knowledge-base/stop-magento-permissions-errors- de manière permanente.
la source
755
et les644
autorisations? Ou avez-vous une raison particulière à recommander775
et664
?rwx
pour le propriétaire, car le groupe et tous les autres ne sont pas pertinents. Mais comme je l’ai dit - tout le monde n’a pas configuré son serveur correctement (en fait, très très peu le font) - et il est possible que l’utilisateur Apache / Nginx / PHP diffère de celui de l’utilisateur SSH / FTP - chaque groupe respectif permet ensuite à chacun derwx
classer ses fichiers comme il se doit.Comme demandé sur Twitter et discuté sur Meta, je vais commencer ici un tutoriel de débogage pour les non-développeurs.
Premièrement, je pense (même si Magento essaie de s’engager dans cette voie), Magento est trop complexe pour un commerçant sans développeur / équipe de développement. Mais si vous êtes courageux et que vous voulez l'essayer, nous faisons de notre mieux pour vous aider. Je pense que pour certaines questions est la frontière entre "comment puis-je faire cela?" et "s'il vous plaît faites mon travail, je suis trop stupide pour google cela" est une ligne assez fine. Je comprends que c’est souvent difficile, Google pense parce que vous ne savez pas pourquoi vous googlez, parce que vous ne connaissez pas encore le nom. Ceci dit, rassemblons tout ce que tout le monde peut faire dans un magasin magento, même s'il n'est pas un développeur.
Sonassi a déjà expliqué comment déboguer magento lorsque vous souhaitez vous salir , mais j'essaie d'ajouter des éléments et de copier ce que je pense qui est applicable aux marchands.
Mode de développement
Vous voulez avoir de vraies erreurs, pas cette page "une erreur survenue" que magento livre normalement.
Merci à fontis.com pour cette image.
Les rapports mentionnés sur la page se trouvent dans
var/reports/<the_number>
Lorsque vous activez le mode développement, magento génère une erreur réelle. Ces erreurs peuvent notamment laisser échapper des informations d'identification, comme celles de la base de données! Alors, réfléchissez avant de l’activer sur les serveurs de production!
Ouvrez votre
index.php
fichier dans le dossier racine de magento. Selon la version, vous trouvez ces lignes autour de la ligne 73:Pour activer maintenant le mode, vous devez changer ces lignes.
Si vous connaissez votre adresse IP (la plupart des gens en reçoivent une nouvelle toutes les 24 heures, au moins en Allemagne), Google vous aide ici:
Si vous ne connaissez pas votre adresse IP pour quelque raison que ce soit, vous pouvez afficher des erreurs pour tout le monde.
Enregistrement
Magento enregistre beaucoup de choses dans deux fichiers:
var/log/exception.log
var/log/system.log
Les exceptions sont toujours enregistrées. Le journal système doit être activé dans le backend:
Définissez
Enabled
sur Oui et vous voyez plus d'erreurs et messages de débogage danssystem.log
et dansexception.log
Est-ce un problème de thème?
Vous avez votre propre thème, celui-ci est configuré dans le backend ici:
Système> Configuration> Conception
Merci à kb.magenting.com pour l'image
Ici, vous pouvez configurer le paquet et le thème. Si vous voulez essayer de reproduire l'erreur dans le thème par défaut, supprimez tout ce qui se trouve dans les champs de saisie. Cliquez ensuite sur Enregistrer et vous verrez le thème standard de Magento comme dans la boutique de démonstration . Si vous avez une boutique avant la version 1.8, vous pouvez trouver une capture d’écran dans le Guide de l’utilisateur de Magento Community Edition.
Si vous ne pouvez pas reproduire le problème dans le thème par défaut, votre thème est cassé, veuillez contacter le fournisseur du thème. Nous n'offrons pas d'assistance pour les thèmes tiers, en particulier les thèmes commerciaux.
Et maintenant?
Vous avez trouvé une erreur réelle, on peut reproduire, est-il reproductible dans le thème par défaut? Génial, veuillez poser une question et nous faisons de notre mieux pour vous aider.
Dans la question:
la source
Pour utiliser les étapes ci-dessus, vous devriez certainement avoir des erreurs.
la source
Debug Backtrace
C'est la bonne fonction pour déboguer l'appel de fonction dans magento.
Ajoutez cette fonction dans includes / config.php ou créez un nouveau fichier et mettez toutes vos fonctions php couramment utilisées.
OutPut sera
la source