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 36
está 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_Category
mas 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
fonte
Respostas:
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
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
Vi erros dessa natureza ocorrerem quando pessoas usaram erroneamente
include
uma classe substituída (resultando no carregamento duas vezes).Suas melhores opções são seguir o procedimento de depuração padrão
./app/code/local
diretório./app/code/community
diretórioE veja se o problema persiste.
fonte
o problema aqui é com a APC, desative a APC e o problema desaparecerá.
fonte
seguindo os padrões php para este erro específico:
significa claramente que você estendeu a classe
Mage_Core_Model_Abstract
usandoclass 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.
fonte
clearInstance
inlocal
ecommunity
pool. No entanto, removi a palavra-chave final da declaração da função para resolver o problema temporariamente, mas é irritante que, quando adiciono afinal
palavra-chave novamente na frente da função, as coisas ainda estão funcionando corretamente.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.
fonte
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
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. :)
fonte
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.
fonte
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.
fonte