Errore irreversibile nelle pagine di amministrazione


15

Ho magento 1.7 installato e ha funzionato bene fino ad ora.

Importa prodotti su base giornaliera. Se è presente un nuovo produttore, lo aggiungo nel menu a discesa in base all'attributo Produttore.

Oggi, ho aggiunto la nuova opzione del produttore nel back-end degli attributi e sono andato a importare prodotti importati con successo.

Ma dopo che provo ad aprire qualsiasi pagina nel sito di amministrazione di Magento, finisce con il seguente messaggio di errore

Errore irreversibile: impossibile ignorare il metodo finale Mage_Core_Model_Abstract :: clearInstance () in /var/www/html/app/code/core/Mage/Catalog/Model/Category.php sulla riga 36

La linea 36ha appena iniziato i ricci {per questa classe

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

E ho controllato Mage_Catalog_Model_Categoryma non esiste un metodo definito con il nomeclearInstance . È davvero fastidioso.

Cordiali saluti: Non ho toccato un singolo carattere di codice, sto solo usando il sito ADMIN per importare prodotti e aggiungere alcuni attributi richiesti


Perché -1? Sono qui per aiutare le persone. Non è questo un posto dove porre domande su Magento.
luce solare

Circa -1, a volte le persone reagiscono in modo strano ... Riguardo al tuo problema, è scritto nel tuo messaggio di errore, basta leggerlo. "IMPOSSIBILE ELIMINARE IL METODO FINALE ...". Cerchi di ignorare qualcosa che non può (tu o qualcuno che la codifica male)
Sylvain Rayé

@ SylvainRayé: non avevo nemmeno toccato un singolo carattere di codice, hai letto la domanda? Sto solo usando il sito ADMIN per importare il prodotto. È Magento che sta gettando errore e di nuovo è Magento che lo codifica male
luce solare

@ SylvainRayé: l'errore non è così leggero come si pensa, specialmente quando proviene dal codice principale e anche quando non si tocca il codice.
luce del sole

Le fate di downvote sono piuttosto aggressive in questa comunità, ignorale. Potrebbe essere un problema in cui un'estensione di terze parti causa il problema estendendo o sovrascrivendo la classe. Prova a disabilitare tutte le estensioni di terze parti per vedere se questo aiuta
Sander Mangel

Risposte:


5

Questo comportamento non si verificherebbe normalmente a meno che tu non abbia modificato il codice di Magento in qualche modo, sia tramite estensioni di terze parti, modifiche del codice di base o personalizzazioni generali.

Il fatto che si verifichi nell'amministratore, prima che qualsiasi modello di dati venga effettivamente caricato (griglia del prodotto, ecc.) Implicherebbe che è causato da un'estensione, non da dati importati.

Si stava verificando sulla griglia del prodotto, quindi potrebbe essere il modello del prodotto in errore a causa di un'importazione non riuscita.

Ma dopo una rapida ricerca, ci sono molti risultati di ricerca di Google indicizzati dei negozi Magento con lo stesso errore. Quindi potrebbe essere nel nocciolo (anche se non ci siamo mai imbattuti) - ma sono dubbioso.

Guardando il nucleo in 1.7

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

Non dovresti avere alcuna sostituzione del clearInstance()metodo. In realtà, questo metodo è dichiarato solo una volta, inapp/code/core/Mage/Core/Model/Abstract.php

final public function clearInstance()

Ho visto errori di questo tipo accadere quando le persone hanno erroneamente usato includeper una classe sovrascritta (risultando caricata due volte).


Le opzioni migliori sono seguire la procedura di debug standard

  1. Ripristina un nucleo pulito
  2. Ripristina una directory adminhtml pulita
  3. Rinominare ./app/code/localdirectory
  4. Rinomina ./app/code/communitydirectory

E vedi se il problema persiste.


3

il problema qui è con APC, disabilitare APC e il problema scompare.


la disabilitazione di APC non è un'opzione. Ma buona idea! Non ci penserei mai! @sunlight hai più di un magento installato? e definito lo stesso prefisso? Potrebbe essere un problema con un altro negozio all'interno della stessa cache.
Fabian Blechschmidt,

3

seguendo gli standard php per questo specifico errore:

Errore irreversibile: impossibile ignorare il metodo finale Mage_Core_Model_Abstract :: clearInstance () in /var/www/html/app/code/core/Mage/Catalog/Model/Category.php sulla riga 36

significa chiaramente che hai esteso la classe Mage_Core_Model_Abstractusando

class Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract

e all'interno di questa classe hai clearInstance() definito una funzione.

Come clearInstance() funzione è una funzione finale, non è consentito modificare questa funzione in nessuna delle classi estese.

qual è esattamente la tua linea 36 aggiungendo un codice fittizio sopra e sotto la linea che supponi sia la linea 36.

Avevo visto gli sviluppatori modificare o esaminare i file in una cartella specifica dove, come con il compilatore impostato su file di classe php veri, si trova in qualche altra cartella.


Ho controllato, non ho alcun metodo denominato clearInstancein locale communitypiscina. Tuttavia, ho rimosso la parola chiave finale dalla dichiarazione della funzione per risolvere temporaneamente il problema, ma mi dà fastidio che quando ho aggiunto la finalparola chiave nella parte anteriore della funzione, le cose continuano a funzionare correttamente.
luce solare

Probabilmente la tua classe viene inclusa due volte, come affermato da sonassi: ho visto errori di questo tipo accadere quando le persone hanno erroneamente usato include per una classe sostituita (risultante nel suo caricamento due volte).
Oscprofessionals

2

Ho avuto lo stesso problema con l'ultima versione di PHP 5.4 su una diversa versione di Magento (nell'area frontend) e non sono riuscito a risolverlo con il codice o eventuali cache. Hai controllato la versione?

In tal caso, vale la pena provare un rollback alla versione precedente.


2

Ho appena sperimentato questo e ho trovato un bug non confermato che afferma una configurazione molto simile.

Questo sembra essere un bug con la combinazione di

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

Apache error_log mostra AH00052: segnale di uscita XX pid figlio errore di segmentazione (11)

Le due migliori soluzioni al problema al momento sembra:

UN) Esegui il downgrade di PHP a una versione di lavoro precedente, possibilmente 5.4.11 o precedente.

B) Disabilitare APC, se non possibile vedere A. :)


Sto riscontrando lo stesso problema con PHP 5.3.27 con MariaDB, Magento 1.7.0.2, senza APC. Sto anche usando Varnish + nginx. È un problema intermittente che a volte forza a riavviare php-fpm, vernice, nginx, ecc. A proposito, non ho trovato alcun metodo clearInstance non core dichiarato da nessuna parte. Forse c'è qualcosa che include le classi due volte. Ma è strano, perché se si trattasse di un errore del parser, accadrebbe ogni volta.
Ricardo Martins,

1

Ho risolto questi problemi con Magento 1.9 cambiando il modo in cui PHP funziona (nel pannello di controllo dell'hosting ho eseguito Run PHP as ... in Fast CGI Application). Non ho assolutamente idea di quali altre conseguenze abbia questo cambiamento. Sto cercando di capirlo al momento.


0

Mi aspettavo lo stesso problema. Non c'era alcuna dichiarazione del metodo clearInstance in nessun punto al di fuori del pool principale.

Ho analizzato il mio nginx access.log e error.log e ho notato che questi errori compaiono quando Google e Bing bot visitano il mio sito mille volte in pochi minuti in diversi url, facendo molte richieste e richieste da Magento. Questa cosa abbatte il mio sito.

Immagino di averlo risolto diminuendo la potenza del crawler di google e bing ai pannelli dei loro webmaster.

È possibile utilizzare GoAccess o Request Log Analyzer per analizzare il file di registro e vedere l'agente utente dei visitatori principali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.