Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Entornos de ejecución en Symfony y Silex (app.php, app_dev.php)

3 de agosto de 2014

¿Cómo estás Javier?

Te consulto respecto a los archivos que se encuentran tanto en Silex como Symfony dentro del directorio web/ de la estructura de una aplicación: app_dev.php y app.php.

Entiendo el hecho que separa los entornos para un generar un entorno development en donde seguramente está configurado para que el debugger esté activado y en el otro entorno production donde obviamente está desactivado.

Ahora lo que no entiendo frente a esto, es en el momento de hacer el deploy a producción es cuando ignoro el app_dev.php? ¿Y subo únicamente el app.php? ¿Y por qué el front controller no me deja ejecutar el archivo app.php a nivel local?

¡Espero que se haya entendido mi duda!

Saludos!


Respuestas

#1

@MuyDiego, como tú mismo dices, la idea de tener dos entornos de ejecución diferentes es poder ejecutar la misma aplicación con diferente configuración. El archivo app_dev.php tiene toda la información de debug activada y por eso es mucho más lento que app_php. Así que cuando desarrollas en local la aplicación deberías usar app_dev.php y cuando la ejecutas en producción deberías usar app_php.

Efectivamente una de las buenas prácticas al hacer deploy de aplicaciones Symfony es no subir nunca el archivo app_dev.php para no desvelar información interna de la aplicación. En cualquier caso, como somos humanos y todos nos equivocamos, si accedes al contenido del archivo app_dev.php verás que incluye un mecanismo de protección muy simple que impide acceder a su contenido:

if (isset($_SERVER['HTTP_CLIENT_IP'])
    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
    || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')
) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(FILE).' for more information.');
}

Como puedes ver en el código anterior, al archivo app_dev.php sólo se puede acceder desde una dirección local tipo 127.0.0.1. Así que si subes app_dev.php a producción, ni siquiera tú vas a poder acceder a sus contenidos.

Lo que no he entendido es tu última pregunta:

¿Y por qué el front controller no me deja ejecutar el archivo app.php a nivel local?

El archivo app.php no tiene ninguna protección, por lo que puedes ejecutarlo sin problemas tanto en local como en producción. Cuéntanos con más detalle los errores que se producen o por qué no puedes ejecutarlo en local.

@javiereguiluz

3 agosto 2014, 11:00