Symfony2 error 500 en lugar de 404 en producción

En mi proyecto Symfony2, obtengo la pantalla de excepción 404 correcta en el modo de desarrollo. Pero obtengo una pantalla en blanco con el código de estado HTTP 500 en lugar de 404 en el modo de producción. Estoy usando plantillas de error personalizadas ubicadas en app/Resources/TwigBundle/views/Exception. En el registro de errores de Apache, crea este mensaje:

PHP Fatal error:  Uncaught exception 'Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException' in /home/test/app/cache/prod/appprodUrlMatcher.php:518\nStack trace:
#0 /home/test/app/cache/prod/classes.php(1025): appprodUrlMatcher->match('/404')
#1 /home/test/app/cache/prod/classes.php(4550): Symfony\\Component\\Routing\\Router->match('/404')
#2 [internal function]: Symfony\\Bundle\\FrameworkBundle\\EventListener\\RouterListener->onKernelRequest(Object(Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent))
#3 /home/test/app/cache/prod/classes.php(3777): call_user_func(Array, Object(Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent))
#4 /home/test/app/cache/prod/classes.php(3703): Symfony\\Component\\EventDispatcher\\EventDispatcher->doDispatch(Array, 'kernel.request', Object(Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent))
#5 /home/test/app/cache/prod/classes.php(4787): Symfony\\Component\\EventDispatcher\\EventDispatcher->dispatch('kernel.request', Object(Symfony\\Component\\HttpKernel\\Event\\Get in /home/test/app/cache/prod/classes.php on line 4560

preguntado el 03 de mayo de 12 a las 08:05

Me he encontrado con un problema similar. Como resolviste esto? -

11 Respuestas

Symfony\Component\Routing\Exception\ResourceNotFoundException significa nombre de ruta indefinido. Parece que tienes algún lugar en tu plantilla de error {{ path('wrong_route') }}.

contestado el 03 de mayo de 12 a las 08:05

A mi me pasa algo similar, pero es causado por is_granted('IS_AUTHENTICATED_FULLY') - y solo para mi página 404, mi página 403 se carga bien. ¿Alguna idea sobre eso? aquí - Nick

@Routy tienes la respuesta pero olvidé mencionarlo aquí :) - coviex

La razón más probable por la que obtiene un error 500/página en blanco en producción (app.php), incluso cuando ha definido una página de error personalizada (por ejemplo, app/Resources/TwigBundle/views/Exception/error404.html.twig) es que su plantilla de error está llamando a la función twig is_granted, sin verificar si el usuario ha iniciado sesión.

Pasos para depurar:

1) Comprobar aplicación/registros/prod.log. ¿Ves un error como este?

request.ERROR: Exception thrown when handling an exception (Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("The security context contains no authentication token. One possible reason may be that there is no firewall configured for this URL.")

2) Si ve el error mencionado anteriormente, vea si puede encontrar una referencia a is_granted en su plantilla de error. Compruebe que el usuario haya iniciado sesión antes de llamar a is_granted. P.ej:

{% if app.user is not null and is_granted('ROLE_ADMIN') %}
<p>Text goes here</p>
{% else %}

3) Si no puede encontrar una referencia a is_granted en su plantilla, vea si hay una llamada a knp_menu_render(), que es utilizada por el paquete de menú KNP. Consulte también cualquier plantilla extendida. Envuelva la llamada a knp_menu_render en una verificación para verificar que el usuario haya iniciado sesión:

{% if app.user %}
    {{ knp_menu_render() }}
{% endif %}

Para obtener más información, consulte el comentario de stof al final de esta página: https://github.com/symfony/symfony/issues/5320

respondido 18 mar '14, 18:03

En mi caso, fue el uso de la etiqueta {% stylesheets %} en una plantilla 404, mientras que TwigBundle no estaba incluido en la configuración de Assetic.

Revise tu app/logs/prod.log, debe tener una respuesta.

Respondido el 19 de Septiembre de 14 a las 04:09

ResourceNotFoundException es lo que arroja el enrutador cuando ninguna ruta coincide con la solicitud actual.

Esto puede ser un problema de caché (80% del tiempo, es el caché. Intente rm -rf app/cache/* en su servidor de preproducción). Como el problema no aparece localmente... (probaste el env "prod" localmente, ¿verdad?).

También debe tratar de eliminar todo de su app/Resources/TwigBundle/views/Exception/error404.html.twig (¿Ese es el nombre de archivo que usas?) excepto HTML simple, para verificar si no es un problema de twig.

Respondido el 06 de diciembre de 12 a las 10:12

Muchísimas gracias... Pasé 1 día con el mismo problema (500 en lugar de 404) y era la aplicación/caché/. - nolazybits

Tuve el mismo problema

Pero mi isGranted estaba en el lado de php. Así que agregué una verificación de token:

Antes de :

if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')

Después :

if ($this->get('security.token_storage')->getToken() && $this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')

respondido 17 mar '17, 13:03

Así es como redirijo todas las rutas inexistentes a la ruta raíz. Coloque esta entrada de ruta en la parte inferior de su configuración de enrutamiento. Toda la ruta existente DEBE estar encima de él!

anything:
    path:     /{path}
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /
        permanent: true
    requirements:
        path: ".+"

referencia:
http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html
http://symfony.com/doc/current/cookbook/routing/redirect_in_config.html

Respondido el 11 de junio de 13 a las 02:06

Debe haber algo mal con SO. Recuerdo esta respuesta, ¡pero definitivamente no para esta pregunta! - ihsan

Otra opción es intentar acceder al token de seguridad en el contexto de seguridad cuando no hay ningún token disponible.

Respondido 28 Feb 17, 16:02

tal vez app/Resources/TwigBundle/views/Exception/error.html.twig hace referencia a otra plantilla de diseño base que no existe; este fue el problema en mi caso

contestado el 23 de mayo de 13 a las 14:05

En mi caso (Symfony 2.3), recibí un código de estado 200, por lo que las páginas de error no se cargaron. Así lo resolví:

https://groups.google.com/d/msg/Symfony2/zNWNmQIq3nk/lVs4uC7QMIcJ

respondido 12 nov., 13:21

Solo una nota complementaria a las respuestas dadas: El ResourceNotFoundException también se puede lanzar si está tratando de incluir una plantilla inexistente. Un caso típico es que refactorizó el código de su aplicación pero olvidó actualizar sus páginas de error, ya que se encuentran en app/Resources y no en tu src/ carpeta o que incluye una plantilla dada que usa una variable o servicio que no está definido en el contexto de "error".

Respondido 26 Feb 16, 10:02

Me encuentro con que Symofny 3 arroja un error 500 en producción cuando no usa

$this->createNotFoundException()

en su controlador.

throw Exception('message', 404)

funciona en el entorno de desarrollo, pero no en la producción.

respondido 10 nov., 17:16

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.