Erro fatal nas páginas de administração

15

Eu tenho o magento 1.7 instalado e funcionou bem até agora.

Eu importo produtos diariamente. Se houver algum novo fabricante, eu o adiciono no atributo Fabricante baseado em lista suspensa.

Hoje, adicionei uma nova opção de fabricante no back-end de atributo e fui importar produtos importados com êxito.

Mas depois disso eu tento abrir qualquer página no site de administração do Magento, que acaba com a mensagem de erro abaixo

Erro fatal: não é possível substituir o método final Mage_Core_Model_Abstract :: clearInstance () em /var/www/html/app/code/core/Mage/Catalog/Model/Category.php na linha 36

A linha 36está começando a ser encaracolada {para esta classe

class Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract
{ <-- this is line 36

E eu verifiquei, Mage_Catalog_Model_Categorymas não há método definido com o nome clearInstance. É realmente irritante.

FYI: não toquei em nenhum caractere do código. Estou apenas usando o site ADMIN para importar produtos e adicionando alguns atributos necessários

luz solar
fonte
Por que -1? Estou aqui para ajudar as pessoas. Este não é um lugar para fazer perguntas sobre Magento.
luz solar
Cerca de -1, às vezes as pessoas reagem de forma estranha ... Sobre o seu problema, está escrito na sua mensagem de erro, basta ler. "NÃO PODE SUBSTITUIR O MÉTODO FINAL ...". Você tenta substituir algo que não pode (você ou alguém que códigos a mal)
Sylvain Rayé
@ SylvainRayé: Eu nem havia tocado em um único caractere de código. Você leu a pergunta ?, estou apenas usando o site ADMIN para importar produtos. É Magento que está jogando erro e, novamente, é Magento que código é mal
luz solar
@ SylvainRayé: O erro não é tão leve quanto você pensa, especialmente quando se trata do código principal e mesmo sem tocar no código.
luz solar
As fadas com votos negativos são bastante agressivas nessa comunidade, ignore-as. Pode ser um problema em que uma extensão de terceiros causa o problema, estendendo ou substituindo a classe. Experimente e desativar todas as extensões do partido 3th para ver se isso ajuda
Sander Mangel

Respostas:

5

Esse comportamento normalmente não aconteceria a menos que você modificasse o código do Magento de alguma maneira - seja por meio de extensões de terceiros, edições de código principais ou personalizações gerais.

O fato de ocorrer no administrador antes de qualquer modelo de dados ser carregado (grade do produto etc.) implicaria que fosse causado por uma extensão - não por dados importados.

Ele estava ocorrendo na grade do produto - então poderia ser o modelo do produto com falha como resultado de uma falha na importação.

Mas, após uma pesquisa rápida, há muitos resultados de pesquisa do Google indexados nas lojas Magento com o mesmo erro. Portanto, pode estar no cerne (embora nunca o tenhamos encontrado) - mas tenho dúvidas.

Olhando para o núcleo em 1.7

+34 abstract class Mage_Catalog_Model_Abstract extends Mage_Core_Model_Abstract
+35 {
+36     /**
+37      * Identifuer of default store

Você não deve ter nenhuma substituição do clearInstance()método. De fato, esse método é declarado apenas uma vez, emapp/code/core/Mage/Core/Model/Abstract.php

final public function clearInstance()

Vi erros dessa natureza ocorrerem quando pessoas usaram erroneamente includeuma classe substituída (resultando no carregamento duas vezes).


Suas melhores opções são seguir o procedimento de depuração padrão

  1. Restaurar um núcleo limpo
  2. Restaurar um diretório adminhtml limpo
  3. Renomear ./app/code/localdiretório
  4. Renomear ./app/code/communitydiretório

E veja se o problema persiste.

Ben Lessani - Sonassi
fonte
3

o problema aqui é com a APC, desative a APC e o problema desaparecerá.

Calvin Muller
fonte
desativar a APC não é uma opção. Mas boa ideia! Eu nunca pensaria nisso! @ sunlight você tem mais de um magento instalado? e definiu o mesmo prefixo? Pode haver um problema com outro armazenamento dentro do mesmo cache.
Fabian Blechschmidt
3

seguindo os padrões php para este erro específico:

Erro fatal: não é possível substituir o método final Mage_Core_Model_Abstract :: clearInstance () em /var/www/html/app/code/core/Mage/Catalog/Model/Category.php na linha 36

significa claramente que você estendeu a classe Mage_Core_Model_Abstractusando

class Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract

e dentro desta classe você clearInstance()definiu como uma função.

Como clearInstance()function é uma função final, você não tem permissão para modificar essa função em nenhuma classe estendida.

qual é exatamente a sua linha 36 adicionando algum código fictício acima e abaixo da linha que você supõe ser a linha 36.

Eu tinha visto desenvolvedores modificando ou pesquisando arquivos em uma pasta específica, onde, como no compilador definido como arquivos de classe php verdadeiros, está em alguma outra pasta.

Oscprofissionais
fonte
Eu verifiquei, não tenho nenhum método chamado clearInstancein locale communitypool. No entanto, removi a palavra-chave final da declaração da função para resolver o problema temporariamente, mas é irritante que, quando adiciono a finalpalavra-chave novamente na frente da função, as coisas ainda estão funcionando corretamente.
sunlight
Provavelmente, sua classe está sendo incluída duas vezes, conforme indicado por sonassi: vi erros dessa natureza ocorrerem quando as pessoas usaram erroneamente o include para uma classe substituída (resultando no carregamento duas vezes).
Oscprofessionals
2

Eu tive o mesmo problema com a versão mais recente do PHP 5.4 em uma versão diferente do Magento (na área de front-end) e não consegui resolver isso por código ou caches. Você checou a versão?

Se for esse o caso, vale a pena tentar uma reversão para a versão anterior.

Nico Siebler
fonte
2

Apenas experimentei isso e encontrei uma postagem de erro não confirmada, indicando uma configuração muito semelhante.

Parece ser um erro com a combinação de

  • PHP 5.4.12+
  • Magento 1.7.x (1.13.x EE)
  • APC (3.1.x)

Apache error_log mostra AH00052: falha de segmentação do sinal de saída XX do pid filho (11)

As duas melhores soluções para o problema no momento em que parece é:

A) Faça o downgrade do PHP para uma versão de trabalho inferior, possivelmente 5.4.11 ou inferior.

B) Desative a APC, se não for possível, consulte A. :)

B00MER
fonte
Estou enfrentando o mesmo problema com o PHP 5.3.27 com MariaDB, Magento 1.7.0.2, sem APC. Também estou usando verniz + nginx. É um problema intermitente que força o reinício do php-fpm, verniz, nginx, etc. A propósito, eu não encontrei nenhum método clearInstance não essencial declarado em qualquer lugar. Talvez haja algo incluindo as aulas duas vezes. Mas é estranho, porque se fosse um erro do analisador, isso aconteceria sempre.
Ricardo Martins
1

Resolvi esses problemas no Magento 1.9, alternando a maneira como o PHP é executado (no painel de controle de hospedagem, mudei Executar PHP como ... para Fast CGI Application). Não tenho absolutamente nenhuma idéia de que outras consequências essa mudança tem. Tentando descobrir isso no momento.

matthijshofstede
fonte
0

Eu estava esperando o mesmo problema. Não havia declaração de método clearInstance em nenhum lugar fora do pool principal.

Analisei meu nginx access.log e error.log e notei que esses erros aparecem quando os bots do Google e do Bing visitam meu site milhares de vezes em poucos minutos em diferentes URLs, fazendo muitas solicitações e consultas do magento. Isso leva o meu site para baixo.

Acho que consertei isso diminuindo o poder do rastreador do google e bing nos painéis de seus webmasters.

Você pode usar o GoAccess ou o Request Log Analyzer para analisar seu arquivo de log e ver o agente de usuário dos principais visitantes.

Ricardo Martins
fonte