Como depurar minha loja Magento
Essa é uma pergunta que não é muito relevante para nós agora, mas se um site Magento SE existisse há 5 anos, provavelmente teria sido nossa primeira pergunta. Para aqueles que estão começando o Magento, ou não estão familiarizados com isso - conhecer os fundamentos da depuração pode ser a chave para descartar a causa dos problemas. E, apesar de sua irrelevância para nós, agora estamos antecipando esta pergunta que aparece com uma abordagem auto-respondida.
Ajude o meu site está inoperante!
- Meu design está com defeito?
- Um módulo de terceiros está com defeito?
- Por que não consigo ver o erro?
Cada uma dessas perguntas pode ser respondida prontamente, seguindo uma abordagem padronizada para depuração que até os usuários mais básicos podem concluir. Por meio de um processo de eliminação dos fundamentos da depuração de uma loja Magento.
extensions
core
debug
theme
Ben Lessani - Sonassi
fonte
fonte
Respostas:
A depuração é um pouco de arte, mas algo que pode ser facilmente dominado seguindo um regime simples.
Siga cada ponto até chegar finalmente a uma solução.
Habilitar erros de PHP
Essa é a chave para a maioria dos problemas. Por segurança ou outros motivos, a exibição de erros do PHP provavelmente pode ser desativada por padrão na sua configuração do PHP.
Você pode ativar erros com uma solução mais permanente ou apenas algo mais temporário.
Solução permanente
Para usuários do Apache / mod_php
No
.htaccess
arquivo raiz do documento - basta soltá-lo no topo.Para usuários do Nginx / FastCGI
Na configuração do seu host virtual Nginx, na
location .php {
diretiva final ou nofastcgi_params
arquivo (se você tiver um especificado)Solução temporária / universal
Para qualquer plataforma
Edite a inicialização do Magento
index.php
na raiz do documento e remova o comentário da seguinte linha:Ativar modo de desenvolvedor
Quando você teve um erro e, de repente, acessou a página "Relatório de erros" e recebeu uma sequência de erros aparentemente inútil como
1184257287824
- você tem algumas opções.Solução permanente
Para usuários do Apache / mod_php
No
.htaccess
arquivo raiz do documento - basta soltá-lo no topo.Para usuários do Nginx / fastcgi
Na configuração do seu host virtual Nginx, na
location .php {
diretiva final ou nofastcgi_params
arquivo (se você tiver um especificado)Solução temporária / universal
Edite a inicialização do Magento
index.php
na raiz do documento e torne aif
declaração sempre verdadeira ou ativada para o seu IP específico.ou
Verifique suas permissões
Permissões incorretas causarão muitos problemas, muitos dos quais não são fáceis de encontrar à primeira vista.
Caso contrário, o site pode parecer estar funcionando normalmente - sem erros críticos realmente visíveis.
Lembre-se de que esta prática é segura para hospedagem dedicada, mas pode apresentar problemas de segurança com hospedagem compartilhada se o processo do Apache não for chrootado por usuário.
Em nosso exemplo, o usuário SSH / FTP é
sonassi
, o usuário Apache éapache
e o grupo éapache
Adicione o usuário FTP / SSH ao grupo Apache
Mais importante, precisamos garantir que o usuário FTP / SSH faça parte do grupo Apache, em nosso exemplo, seu
apache
(mas também é comumwww-data
)Continue adicionando ao grupo quantos usuários você tiver para FTP / SSH.
Redefinir permissões originais
Portanto, antes de começarmos, vamos garantir que todas as permissões estejam corretas.
Tornando as alterações permanentes
ACLs e bits fixos
As ACLs no Linux nos permitem definir regras específicas, no nosso caso, quais arquivos de permissões devem herdar na criação. Um pedaço fixo (mencionado posteriormente) cuida da herança do grupo, mas não ajuda nas permissões, e é por isso que usamos ACLs.
Comece ativando o suporte a ACL na partição ativa; verifique se o seu Kernel foi compilado com o suporte a ACL .
Sua partição pode ser
/
,/home
,/var
ou qualquer outra coisa, substitua conforme apropriado.Agora as ACLs estão ativadas, podemos definir as regras da ACL e agrupar os bits permanentes:
Mas eu não tenho suporte a ACL
Se o seu Kernel não suporta ACLs, você também pode usar
umask
(que é uma configuração de tempo de execução para BASH, FTP e PHP) para definir as permissões de arquivo padrão. Magento geralmente defineumask(0)
emindex.php
, no entanto, seria do seu interesse para mudar isso.Na sua
index.php
mudança, aumask
linha a serE no seu ambiente BASH para SSH, defina isso em seu
.bashrc
ou.bash_profile
Para o seu servidor FTP, você precisará ler a documentação, mas o princípio é o mesmo.
Reverter tema para o padrão
É possível que seu tema ou pacote seja responsável por esse problema. Voltar ao tema Magento é uma maneira rápida de descobrir.
** Isso vem com a ressalva de que alguns módulos podem depender de certos recursos do tema *
Em vez de alterar qualquer coisa pelo painel de administração, é muito mais simples simplesmente renomear os diretórios incorretos.
Via SSH
Ou através do seu cliente FTP, percorra e renomeie seu pacote para outra coisa. por exemplo.
myBrokenTheme.tmp
Se isso resolver seu problema
Então você precisa se aprofundar um pouco sobre qual parte do modelo é problemática. Portanto, restaure seu pacote e tente o seguinte, testando entre cada um.
Essencialmente, o processo é habilitar gradualmente os diretórios à medida que você percorre a árvore de arquivos - até encontrar o arquivo incorreto.
.tmp
.tmp
Em seguida, se uma correção resultar, renomeie todos os arquivos no diretório de layout para
.tmp
- (para os usuários SSHls | xargs -I {} mv {} {}.tmp
ourename 's/^/.tmp/' *
)Em seguida, ative gradualmente cada arquivo 1 por 1 até resolver.
Se isso não resolver seu problema
É possível que seus diretórios
base/default
ouenterprise/default
tenham sido contaminados - e melhor substituídos por uma versão limpa conhecida.Você pode fazer isso baixando uma versão limpa do Magento e substituindo seus diretórios conforme necessário. Via SSH, você pode fazer isso:
Você também pode aproveitar
diff
os dois diretórios se quiser verificar as alterações.NB Este método causará mais erros durante o processo, pois a dependência do módulo determina a existência de arquivos específicos. Infelizmente, é o par para o curso.
Desativar módulos locais
Por padrão, o Magento define o caminho de inclusão do PHP para carregar classes na seguinte ordem
Novamente, em vez de desativar os módulos pelo painel de administração do Magento, é mais prático fazer isso no nível do arquivo.
Normalmente, para desativar um módulo da maneira "adequada", você deve editar o respectivo
./app/etc/modules/MyModule.xml
arquivo e definir<active>false</active>
- no entanto, isso não impede que uma classe seja carregada.Se outra classe estender uma determinada classe em um módulo (ignorando quaisquer declarações de dependência do Magento), ela ainda será carregada - independentemente de a extensão estar desabilitada ou não.
Então, novamente, o melhor meio de desativar uma extensão é renomear o diretório.
Comece desativando o local
Apenas renomeie o diretório via FTP ou use o seguinte comando SSH
Desative a comunidade
Se o problema for resolvido a partir de
Então, é um caso de entender de qual módulo em particular o erro ocorreu. Como no exemplo dado acima para o diagnóstico da embalagem, o mesmo processo se aplica.
Portanto, restaure o diretório X e tente o seguinte, testando entre cada um.
Essencialmente, o processo é ativar gradualmente os diretórios (módulos) um por um até que o erro ocorra novamente
.tmp
(para os usuários SSHls | xargs -I {} mv {} {}.tmp
ourename 's/^/.tmp/' *
).tmp
do nome do arquivoSe o problema não for resolvido
Então é possível que o próprio núcleo esteja contaminado. O principal núcleo PHP do Magento consiste em
Então, novamente, renomeie esses diretórios e copie em uma variante limpa. Supondo que você já baixou uma versão limpa do Magento como acima, via SSH, você pode fazer isso:
Se o problema ainda não tiver sido resolvido, substitua o
lib
diretório tambémNeste ponto, sua loja Magento não passará de uma instalação de baunilha com um banco de dados modificado.
Na verdade, alguns modelos ainda estão armazenados no banco de dados (por exemplo, incremento do pedido) - portanto, neste ponto, torna-se um caso de fazer essas edições manualmente. Até agora, todas as etapas acima foram reversíveis, sem danos duradouros. Mas se estivéssemos importando também um banco de dados Magento limpo - isso pode ser irreversível (exceto para restaurar um backup).
O guia acima serve para ajudá-lo a identificar um erro; não para corrigir o erro resultante.
Conteúdo fornecido voluntariamente em www.sonassi.com/knowledge-base/magento-debug-process e www.sonassi.com/knowledge-base/stop-magento-permissions-errors-permanently
fonte
755
e644
permissões? Ou você tem algum motivo especial para recomendar775
e664
?rwx
apenas do proprietário - pois o grupo e todos os outros não são relevantes. Mas, como mencionei - nem todo mundo configura seu servidor adequadamente (de fato, muito, muito poucos o fazem) - e existe o potencial do usuário do Apache / Nginx / PHP diferir do do usuário do SSH / FTP - adicionando um ao outro ao cada grupo respectivo permite que cada um dosrwx
arquivos seja possível.Conforme solicitado no Twitter e discutido no Meta , começarei aqui um tutorial de depuração para não-desenvolvedores.
Primeiro eu acho (até tu magento tenta se engajar nisso) Magento é muito complexo para um comerciante sem desenvolvedor / equipe de desenvolvimento. Mas se você é corajoso e deseja experimentá-lo, estamos dando o nosso melhor aqui para ajudá-lo. Eu acho que para algumas perguntas é a fronteira entre "como posso fazer isso?" e "por favor, faça o meu trabalho, sou burro demais para pesquisar no google" é uma linha bastante tênue. Entendo que muitas vezes é difícil, o Google pensa porque você não sabe para o que está pesquisando, porque ainda não sabe o nome. Dito isto, vamos coletar coisas que todos com uma loja magento podem fazer, mesmo que você não seja desenvolvedor.
Uma resposta muito boa sobre como depurar o magento, quando você quer se sujar, já foi dada por Sonassi , mas tento adicionar coisas e copiar o que eu acho que é aplicável aos comerciantes.
Modo de desenvolvimento
Você quer ter erros reais, e não a página de "erro de erro" que o magento entrega normalmente.
Obrigado a fontis.com por esta imagem.
Os relatórios mencionados na página podem ser encontrados em
var/reports/<the_number>
Quando você ativa o modo de desenvolvimento, o magento gera um erro real; esses erros podem especialmente vazar credenciais, como as do banco de dados! Portanto, pense antes de ativá-lo nos servidores de produção!
Abra seu
index.php
arquivo na pasta raiz do magento, dependendo da versão, você encontrará estas linhas em torno da linha 73:Para ativar agora o modo, você precisa alterar essas linhas.
Se você conhece seu endereço IP (a maioria das pessoas obtém um novo a cada 24 horas, pelo menos na Alemanha), o Google ajuda você aqui:
Se você não conhece seu IP por qualquer motivo, pode mostrar erros para todos.
Exploração madeireira
O Magento registra muitas coisas em dois arquivos:
var/log/exception.log
var/log/system.log
Exceções são sempre registradas. O log do sistema precisa ser ativado no back-end:
Defina
Enabled
como Sim e você vê mais erros e mensagens de depuração dentrosystem.log
e dentroexception.log
É um problema de tema?
Você tem seu próprio tema, isso é configurado no back-end aqui:
Sistema> Configuração> Design
Obrigado a kb.magenting.com pela imagem
Aqui você pode configurar o pacote e o tema. Se você deseja tentar reproduzir o erro no tema padrão, remova tudo dos campos de entrada. Em seguida, clique em Salvar e você verá o tema padrão do Magento, como na loja de demonstração . Se você tiver uma loja antes da 1.8, poderá encontrar uma captura de tela no Guia do Usuário do Magento Community Edition.
Se você não conseguir reproduzir o problema no tema padrão, seu tema está quebrado, entre em contato com o fornecedor do tema. Não oferecemos suporte para temas de terceiros, especialmente os comerciais.
E agora?
Você encontrou um erro real, pode-se reproduzir, é reproduzível no tema padrão? Ótimo, abra uma pergunta e estamos dando o nosso melhor para ajudar.
Na pergunta:
fonte
Para usar as etapas acima, você deve obter erros definitivamente.
fonte
Depurar Backtrace
Esta é a boa função para depurar a chamada de função no magento.
Adicione esta função em includes / config.php ou crie um novo arquivo e coloque todas as funções php usadas comuns.
OutPut será
fonte