Error fatal en las páginas de administración

15

Tengo instalado Magento 1.7 y funcionó bien hasta ahora.

Importo productos a diario. Si hay algún fabricante nuevo, lo agrego en el atributo Fabricante desplegable.

Hoy, he agregado una nueva opción de Fabricante en el back-end de atributos y he ido a importar productos, importó productos con éxito.

Pero después de eso trato de abrir cualquier página en el sitio de administración de Magento, termina con el siguiente mensaje de error

Error fatal: no se puede anular el método final Mage_Core_Model_Abstract :: clearInstance () en /var/www/html/app/code/core/Mage/Catalog/Model/Category.php en la línea 36

Line 36acaba de comenzar rizado {para esta clase

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

Y lo he comprobado Mage_Catalog_Model_Categorypero no hay un método definido con el nombre clearInstance. Es realmente molesto.

FYI: no toqué un solo carácter de código, solo estoy usando el sitio ADMIN para importar productos y agregar algunos atributos requeridos

luz de sol
fuente
¿Por qué -1? Estoy aquí para ayudar a la gente. ¿No es este un lugar para hacer preguntas sobre Magento?
luz del sol
Aproximadamente -1, a veces las personas reaccionan de manera extraña ... Sobre su problema, está escrito en su mensaje de error, solo léalo. "NO PUEDE ANULAR EL MÉTODO FINAL ...". Intenta anular algo que no puede (usted o alguien que lo codifica mal)
Sylvain Rayé
@ SylvainRayé: Ni siquiera había tocado un solo carácter de código. ¿Leíste la pregunta ?, solo estoy usando el sitio ADMIN para importar el producto. Es Magento el que arroja el error y nuevamente es Magento quien lo codificó mal
luz del sol el
@ SylvainRayé: El error no es tan simple como crees, especialmente cuando proviene del código central e incluso sin tocar el código.
luz del sol
Las hadas de votos negativos son bastante agresivas en esta comunidad, ignóralas. Podría ser un problema donde una extensión de terceros causa el problema al extender o sobrescribir la clase. Intente y desactive todas las extensiones de terceros para ver si eso ayuda
Sander Mangel

Respuestas:

5

Este comportamiento normalmente no ocurriría a menos que haya modificado el código de Magento de alguna manera, ya sea a través de extensiones de terceros, ediciones de códigos centrales o personalizaciones generales.

El hecho de que ocurra en el administrador, antes de que se carguen los modelos de datos (cuadrícula de productos, etc.) implicaría que es causado por una extensión, no por datos importados.

Si ocurriera en la cuadrícula del producto, podría ser el modelo del producto culpable como resultado de una importación fallida.

Pero después de una búsqueda rápida, hay muchos resultados de búsqueda indexados en Google de las tiendas Magento con el mismo error. Por lo tanto, podría estar en el núcleo (aunque nunca lo hemos encontrado), pero tengo dudas.

Mirando el núcleo en 1.7

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

No debería tener ninguna anulación del clearInstance()método. De hecho, este método solo se declara una vez, enapp/code/core/Mage/Core/Model/Abstract.php

final public function clearInstance()

He visto errores de esta naturaleza que ocurren cuando las personas lo han usado includepor error para una clase anulada (lo que resulta en que se cargue dos veces).


Sus mejores opciones son seguir el procedimiento de depuración estándar

  1. Restaurar un núcleo limpio
  2. Restaurar un directorio adminhtml limpio
  3. Renombrar ./app/code/localdirectorio
  4. Renombrar ./app/code/communitydirectorio

Y vea si el problema persiste.

Ben Lessani - Sonassi
fuente
3

El problema aquí es con APC, desactive APC y el problema desaparecerá.

Calvin Muller
fuente
deshabilitar APC no es una opción. Pero buena idea! ¡Nunca pensaría en esto! @sunlight ¿tienes más de un magento instalado? y definió el mismo prefijo? Podría ser un problema con otra tienda dentro del mismo caché.
Fabian Blechschmidt
3

siguiendo los estándares de php para este error específico:

Error fatal: no se puede anular el método final Mage_Core_Model_Abstract :: clearInstance () en /var/www/html/app/code/core/Mage/Catalog/Model/Category.php en la línea 36

claramente significa que tienes clase extendida Mage_Core_Model_Abstractusando

class Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract

y dentro de esta clase has clearInstance()definido como una función.

Como la clearInstance()función es una función final, no puede modificar esta función en ninguna de las clases extendidas.

cuál es exactamente su línea 36 al agregar un código ficticio arriba y debajo de la línea que usted supone es la línea 36.

Había visto desarrolladores que modificaban o buscaban archivos en una carpeta específica donde, al igual que con el compilador establecido en verdaderos archivos de clase php, estaba en otra carpeta.

Oscprofesionales
fuente
Que yo sepa, no tengo ningún método llamado clearInstanceen localy communitypiscina. Sin embargo, eliminé la palabra clave final de la declaración de función para resolver el problema temporalmente, pero me molesta que cuando agregué la finalpalabra clave al frente de la función, las cosas todavía funcionan correctamente.
luz del sol
Probablemente su clase se incluya dos veces como lo indica sonassi: he visto errores de esta naturaleza que ocurren cuando la gente ha utilizado incluir erróneamente incluir una clase anulada (lo que hace que se cargue dos veces).
Oscprofessionals
2

Tuve el mismo problema con la última versión de PHP 5.4 en una versión diferente de Magento (en el área de la interfaz) y no pude resolver esto por código o cualquier caché. ¿Revisaste la versión?

Si este es el caso, valdría la pena intentar volver a la versión anterior.

Nico Siebler
fuente
2

Acabo de experimentar esto y encontré una publicación de error no confirmada que indica una configuración muy similar.

Esto parece ser un error con la combinación de

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

Apache error_log muestra AH00052: señal de salida del niño pid XX Error de segmentación (11)

Las dos mejores soluciones al problema en este momento parece:

UN) Reduzca la versión de PHP a una versión de trabajo inferior, posiblemente 5.4.11 o inferior.

B) Desactive APC, si no es posible, vea A. :)

B00MER
fuente
Estoy experimentando el mismo problema con PHP 5.3.27 con MariaDB, Magento 1.7.0.2, sin APC. También estoy usando Varnish + nginx. Es un problema intermitente que obliga a reiniciar php-fpm, barniz, nginx, etc. a veces. Por cierto, no encontré ningún método clearInstance no central declarado en ningún lugar. Tal vez hay algo que incluye las clases dos veces. Pero es extraño, porque si se tratara de un error del analizador, sucedería siempre.
Ricardo Martins
1

Resolví estos problemas para Magento 1.9 cambiando la forma en que se ejecuta PHP (en el panel de control de alojamiento cambié Ejecutar PHP como ... a la aplicación Fast CGI). No tengo ni idea de qué otras consecuencias tiene este cambio. Tratando de resolver eso en este momento.

matthijshofstede
fuente
0

Esperaba el mismo problema. No hubo una declaración de método clearInstance en ningún lugar fuera del grupo principal.

Analicé mi nginx access.log y error.log y noté que estos errores aparecen cuando los robots de Google y Bing visitan mi sitio mil veces en unos minutos en diferentes URL, haciendo muchas solicitudes y consultas de magento. Estas cosas derriban mi sitio.

Supongo que lo solucioné disminuyendo la potencia del rastreador de google y bing en los paneles de sus webmasters.

Puede usar GoAccess o Request Log Analyzer para analizar su archivo de registro y ver el agente de usuario de los principales visitantes.

Ricardo Martins
fuente