instalar - symfony php tutorial
El entorno de desarrollo Symfony2 funciona, el entorno prod produce un error 404 (9)
Recientemente he instalado exitosamente Symfony2 en mi máquina.
Puedo acceder a http:/localhost/app_dev.php
(entorno dev)
Sin embargo, cuando intento acceder al entorno prod:
http:/localhost/app.php
Recibo el siguiente mensaje de error en el navegador:
Ups! Ocurrió un error
El servidor devolvió un "404 No encontrado". Algo está roto. Envíenos un correo electrónico a [email] y háganos saber lo que estaba haciendo cuando ocurrió este error. Lo arreglaremos lo más pronto posible. Pedimos disculpas por cualquier inconveniente causado.
He comprobado lo obvio: el archivo app.php existe en la misma carpeta que app_dev.php, así que no sé qué está causando esto.
¿Alguien tiene una solución para arreglar esto?
[[Editar]]
He borrado el caché escribiendo: sudo php app/console cache:clear env=prod no-debug
como se recomienda. Ahora tengo una pantalla en blanco. Lo que es preocupante, no hay mensajes de error registrados en app / logs / prod.log, así que no tengo la menor idea de lo que está mal (el entorno de prod sigue funcionando bien).
Contenido de mi aplicación / config / routing.yml file:
### fos routing, remove later
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile
fos_user_register:
resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
prefix: /register
fos_user_resetting:
resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
prefix: /resetting
fos_user_change_password:
resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
prefix: /profile
###
# Internal routing configuration to handle ESI
#_internal:
# resource: "@FrameworkBundle/Resources/config/routing/internal.xml"
# prefix: /_internal
Aquí está mi aplicación / config / routing_dev.yml file
_welcome:
pattern: /
defaults: { _controller: AcmeDemoBundle:Welcome:index }
_demo_secured:
resource: "@AcmeDemoBundle/Controller/SecuredController.php"
type: annotation
_demo:
resource: "@AcmeDemoBundle/Controller/DemoController.php"
type: annotation
prefix: /demo
_assetic:
resource: .
type: assetic
_wdt:
resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
prefix: /_wdt
_profiler:
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
prefix: /_profiler
_configurator:
resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml"
prefix: /_configurator
_main:
resource: routing.yml
Acabo de darme cuenta de que NO tengo un enrutamiento_prod.yml **
(suena la alarma) - ¿Symfony2 no se envía con un archivo de configuración de enrutamiento de producción?
El contenido de mi archivo de configuración de Apache se muestra a continuación:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /path/to/symfony/web
ServerName localhost
# Custom log file
Loglevel warn
ErrorLog /path/localhost.error.log
CustomLog /path/localhost.access.log combined
<Directory /path/to/symfony/web>
AllowOverride None
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</Directory>
</VirtualHost>
[[Más detalles]]
Contenido de app / logs / prod.log
[2012-08-10 18:10:38] security.INFO: SecurityContext poblado con un token anónimo [] [] [2012-08-10 18:10:38] request.ERROR: Symfony / Component / HttpKernel / Exception / NotFoundHttpException: no se encontró una ruta para "GET /" (excepción no detectada) en /path/to/symfony/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php line 83 [] []
¿Has activado el entorno de producción y has borrado la memoria caché? Ejecuta la consola y haz esto:
app/console --env=prod cache:clear
(Agrega esto dentro del archivo routing_dev.yml) Agrega esto en routing_dev.yml
_wellcome:
pattern: /
defaults: { _controller:AppBundle:Default:index }
Creo que tuve un problema similar. Creo que al calentar el caché resolví mi caso si lo hacía.
php app/console cache:warmup --env=prod --no-debug
Habiendo instalado recientemente Symfony 2.2, me encontré con este problema también, pero en realidad es el comportamiento normal. El significado fuera de la caja Symfony 2.x (a partir de este escrito) no se envía con ninguna ruta / contenido para el entorno de producción.
En su caso, parece que instaló el paquete Friends of Symfony, que configuró algunas rutas en su ruta de producción ( routing.yml
), pero de un vistazo, ninguna de las rutas parece estar apuntando a la raíz de su entorno de producción, es decir, http:/localhost/app.php/
por lo que probablemente se espera el 404. No puedo estar totalmente seguro ya que se trata de importar rutas, por lo que los detalles están ocultos. Una excelente manera de verificar sus rutas es leyendo sobre Visualizar y depurar rutas donde puede obtener información sobre el app/console router:debug
la app/console router:debug
.
routing.yml
es el lugar predeterminado para las rutas en su entorno de producción (lo que significa que routing_prod.yml
no es una cosa). Notará que routing_dev.yml
importa routing.yml
. Eso significa que todo lo que pones en producción es (fuera de la caja) accesible en el desarrollo. El contenido de demostración que ve es exclusivo del entorno de desarrollo y por eso no lo ve en la producción. Siéntase libre de mover algunas cosas para satisfacer sus necesidades, pero generalmente es una buena idea que el desarrollador importe la producción, pero no al revés.
Cada vez que quiera probar los cambios en su producción, querrá borrar su caché como recomienda @tolgap. El entorno de producción se apoya en gran medida en la memoria caché precompilada, por lo que ese comando forzará la actualización de la memoria caché de producción. El entorno dev siempre está actualizando su caché. Entender esto es crucial para trabajar con Symfony. Aunque el Libro en Symfony.org es un gran punto de entrada, no hace exactamente entender este punto sobre los subtítulos del almacenamiento en caché y el flujo de trabajo. Definitivamente estuve confundido por un minuto antes de routing_dev.yml
cuenta de la relación entre routing.yml
y routing_dev.yml
y el almacenamiento en caché suave de los desarrolladores frente al almacenamiento en caché duro de la producción.
Hoy tuve el mismo problema y probé varias soluciones. Hasta que recordé que es importante tener habilitado el servicio apache mod_rewrite. Para hacer esto ejecuta el siguiente comando (en Ubuntu)
sudo a2enmod rewrite
Y luego reinicie el servidor
sudo service apache2 restart
Espero que alguien pueda ser de ayuda. ¡Saludos!
Me sorprende que nadie te haya dicho: no tienes una ruta para / en el entorno prod.
escribe esto en app / config / routing.yml
_welcome:
pattern: /
defaults: { _controller: AcmeDemoBundle:Welcome:index }
Mi carpeta de caché de Symfony no era escribible. Funcionó cuando hice el directorio completo de la caché y sus archivos como de escritura.
sudo chmod -R 777 .
Necesita instalar APC para su servidor local, y todo funcionará en prod mod para usted. También intente golpear la base de datos correcta en parameters.yml, porque dev está agregando DATABASENAME_dev.
Probé la solución que @gilden dio en su comentario; funciona.
php bin/console cache:clear --env=prod
lugar de rm -rf app/cache/*
.