exception magento

exception - Magento "El controlador frontal alcanzó 100 iteraciones de coincidencia del enrutador" error



(11)

ACTUALIZACIÓN 2: Tengo algunos cambios adicionales que deberían ayudar a evitar una causa diferente de las 100 iteraciones de coincidencia de enrutadores

https://github.com/convenient/magento-ce-ee-config-corruption-bug#update-2-further-improvements

=============================================== ==================

ACTUALIZACIÓN: MAGENTO HA UTILIZADO MI RESPUESTA COMO PARCHE

https://github.com/convenient/magento-ce-ee-config-corruption-bug#update-good-news-a-patch-from-magento

=============================================== ==================

Recientemente he pasado bastante tiempo investigando este error. He escrito mis hallazgos completos, explicación y replicación here .

https://github.com/convenient/magento-ce-ee-config-corruption-bug

Sin embargo, para la respuesta corta. Esto parece ser un error de Magento que se puede corregir anulando Mage_Core_Model_Config::init con lo siguiente:

public function init($options=array()) { $this->setCacheChecksum(null); $this->_cacheLoadedSections = array(); $this->setOptions($options); $this->loadBase(); $cacheLoad = $this->loadModulesCache(); if ($cacheLoad) { return $this; } //100 Router Fix Start $this->_useCache = false; //100 Router Fix End $this->loadModules(); $this->loadDb(); $this->saveCache(); return $this; }

EDITAR: Actualizado para probar en vanilla 1.5

Acabo de ejecutar el script de replicación en una instalación simple de 1.5. Que tenía todas las cachés a excepción de la caché CONFIG desactivada.

No produjo el error de 100 router como ocurre en 1.13, pero sí rompió el sitio web y toda la página de inicio mostrada fue una pantalla blanca.

La causa fue que cuando estábamos buscando un controlador y una acción, fuimos emparejados con Mage_Core_IndexController::indexAction lugar de Mage_Cms_IndexController::indexAction .

class Mage_Core_IndexController extends Mage_Core_Controller_Front_Action { function indexAction() { } }

Mage_Core_IndexController::indexAction es una función vacía, y explica la página blanca a la perfección.

Ya no puedo replicar este error al colocar _useCache = false en Mage_Core_Model_Config .

Creo que tal vez la configuración única de los sitios de Magento podría hacer que no coincida por completo con un controlador, en lugar de Mage_Core_IndexController a esta acción Mage_Core_IndexController .

Mi sitio se está cayendo una o dos veces al día cuando comienza a arrojar la excepción "El controlador frontal alcanzó 100 iteraciones de coincidencia del enrutador". Una vez que esto sucede, el acceso al administrador y el frontend desaparecen. Me acabo de quedar con una página de error.

Esto comenzó después de actualizar de Magento 1.5.0.1 a 1.5.1.0. Si borro manualmente el directorio var / cache /, estoy funcionando nuevamente.

He buscado Google en este. En los resultados de búsqueda limitados, he encontrado que nada me ha ayudado a resolver esto.

Se agradecerá cualquier idea sobre por qué esto puede estar sucediendo y cómo podría resolverse.

--actualizar-----------------------

Utilizando el código de depuración provisto en la útil respuesta de, Andrey Tserkus, pude determinar que el error es causado por la desaparición de algunos de mis enrutadores.

Los enrutadores normales emitidos por el código de depuración son: Total 7: admin, estándar, cms, amshopby, fishpig_wordpress, seosuite, predeterminado

Cuando ocurre el error, han cambiado a: Total 3: administrador, estándar, predeterminado

Cuando esto sucede, parece que las rutas que faltan hacen que el código itere a 100 para cada solicitud de página. Investigaré más esta condición.


El mensaje de error es demasiado general para tratar de resolver este problema. Le sugiero que contrate a un desarrollador web independiente de Magento para que busque el origen del problema en su sitio real. No puede ser resuelto teóricamente.

Como se ve en el mensaje, el problema ocurre porque los enrutadores están haciendo referencias circulares para enviar solicitudes. Uno de ellos coincide con la solicitud, pero no envía y lo empuja para volver a enviarlo. O ningún enrutador coincide con la solicitud.

Puede obtener más información yendo a la aplicación de archivo Magento Core / code / core / Mage / Core / Controller / Varien / Front.php, encuentre allí las líneas

while (!$request->isDispatched() && $i++<100) { foreach ($this->_routers as $router) { if ($router->match($this->getRequest())) { break; } } }

y reemplazarlos por

Mage::log(''----Matching routers------------------------------''); Mage::log(''Total '' . count($this->_routers) . '': '' . implode('', '', array_keys($this->_routers))); while (!$request->isDispatched() && $i++<100) { Mage::log(''- Iteration '' . $i); $requestData = array( ''path_info'' => $request->getPathInfo(), ''module'' => $request->getModuleName(), ''action'' => $request->getActionName(), ''controller'' => $request->getControllerName(), ''controller_module'' => $request->getControllerModule(), ''route'' => $request->getRouteName() ); $st = ''''; foreach ($requestData as $key => $val) { $st .= "[{$key}={$val}]"; } Mage::log(''Request: '' . $st); foreach ($this->_routers as $name => $router) { if ($router->match($this->getRequest())) { Mage::log(''Matched by "'' . $name . ''" router, class '' . get_class($router)); break; } } }

Después de eso espere a que el sitio produzca el error, abra var / log / system.log y vea allí la información de depuración sobre lo que está sucediendo dentro de su sistema. Ayudará a ver mucho mejor, qué enrutador rompe el sistema.


Este error también estaba afectando a uno de nuestros clientes con cargas muy elevadas. El cambio del valor de la URL de administración en local.xml solucionó ambos problemas.


Este mensaje es causado por datos de configuración mal almacenados en caché. No estoy seguro de qué es lo que hace que la configuración en caché se corrompa. Supongo que podría ser una cantidad de cosas que variarían según cómo se ejecute Magento.

Supongo que si aún puedes acceder al backend de Magento, puedes intentar borrar el caché en Sistema> Administración de caché. Si eso no ayuda (o si no puede acceder al backend de Magento, que es probable con este error), entonces determine cómo se configura su almacenamiento en caché buscando el valor de <cache> <backend> en la aplicación / etc. /local.xml. Si está utilizando archivos para caché (el valor predeterminado), puede borrar magento / var / cache con

rm -rf /path/to/magento/var/cache/*

Si está utilizando memcached, busque el puerto en <puerto> y puede hacer

telnet memcache_server portnumber flush_all

O si está utilizando redis, puede hacer

telnet redis_server portnumber FLUSHALL


Estos son los mejores pasos para resolver este tipo de problemas:

  1. Reparar el servidor Apache.
  2. Descomando una línea de .htaccess si magento en un subdirectorio.
  3. Borrando el directorio /var/cache y habilitando mod_rewrite .
  4. Habilita el uso de HTACCESS.
  5. Crear una página CMS sin ruta.
  6. Especifique la página adecuada 404.
  7. No se puede encontrar la cookie del usuario (razón posible también).

Para obtener más detalles sobre cómo implementar los pasos anteriores, siga este enlace a continuación: https://merchantprotocol.com/506/solved-front-controller-reached-100-router-match-iterations/

Me gustaría recomendar encarecidamente leer las instrucciones de Alan Strom también. El enlace de la pauta de Alan Storm: http://alanstorm.com/magentos_many_404_pages



Hemos tenido el mismo problema y hemos profundizado un poco para descubrir que el problema no se relaciona directamente con los enrutadores que se cargan, sino con los módulos cargados.

Para resolver esto, agregamos el siguiente código de depuración:

app/code/core/Mage/Core/Controller/Varien/Front.php : Line 183 if ($i>100) { file_put_contents(''/tmp/debug.txt'', Mage::getConfig()->getNode()->asNiceXml()); Mage::throwException(''Front controller reached 100 router match iterations''); }

Cuando verificamos el resultado de esto, podemos ver que SOLAMENTE el módulo Mage_Core está cargado (verifique el nodo ''config / modules''. Creemos que hay algún tipo de condición de carrera que está ocurriendo, lo que significa que el sistema se queda con un sistema parcialmente formado configuración que luego se almacena en caché.

Estaría interesado en escuchar si tiene la misma situación.


Intenté todas las sugerencias anteriores y no conseguí llegar a ninguna parte. Luego intenté una copia de seguridad, ya que iba a intentar una actualización, y obtuve un error de permiso al leer un archivo. Esto fue bastante extraño, así que cambié los permisos, y al instante comenzó a funcionar.

aplicación chmod 770 / code / core / Mage / Cms / controllers / IndexController.php

Espero que esto ayude a alguien.


Probablemente su nombre de usuario de administrador no coincida con roouter-> adminhtml-> frontname en la aplicación / etc / local.xml

Vaya a esta aplicación de directorio / etc / local.xml de su proyecto magento y asegúrese de que debe ser el mismo con su panel de administración url-frontname;

<admin> <routers> <adminhtml> <args> <frontName><![CDATA[myadminfrontname]]></frontName> </args> </adminhtml> </routers> </admin>

Tu URL debe ser así

http://www.myproject.com/myadminfrontname/

también puede eliminar su directorio de caché con este código.

ve al directorio raíz de tu proyecto y escribe

rm -rfv var/*


Puede que esto no te ayude, pero podría ayudar a otros. Estaba teniendo el mismo problema de la nada.

Eliminar el caché y los bloqueos manualmente resolvió el problema para mí (por ahora).


Si a Magento le falta la página CMS no-route (clave url no-route ) o si la configuración predeterminada CMS No Route Page no está configurada correctamente en System=>Configuration=>Web=>Default Pages , Magento puede entrar en un infinito bucle hasta que llegue al límite de 100 iteraciones.