instalar example php version-control configuration yii2 web-deployment

php - example - instalar yii2



Yii2: ¿Cómo prepararse para el entorno de depuración y producción? (6)

Sé que Yii define y usa las constantes YII_DEBUG y YII_ENV. Por supuesto, están configurados en "true" y "dev" en mi máquina local. Esto se debe a que la plantilla de la aplicación básica lo ha preparado de esta manera en el archivo index.php . Este archivo también me dice que debo eliminar esas líneas para el modo de producción, es decir, en la máquina de producción. Entonces esas constantes se establecen en ''falso'' y ''prod'' de forma predeterminada. Eso está todo bien y lo entiendo. (Puede encontrar más información en Definir constantes y Constantes de entorno ).

Mi pregunta: ¿Cómo puedo manejar mejor estas constantes cuando index.php está contenido en VCS? En un ambiente deberían existir, en el otro no. Y también podría ser una máquina de prueba, por supuesto. ¿Qué opciones tengo? Creo que esto también es una cuestión del método de despliegue. Actualmente, solo estoy presionando a través de Git a la máquina de producción, lo que es un IMO de despliegue primitivo ...

¿Cómo lo haces? ¿Que sugieres?

EDIT: En realidad, el manejo de los archivos params es el mismo problema.


Otra solución simple:

Archivo index.php (entra en el repositorio de VCS):

<?php @include ''my-env.php''; require(__DIR__ . ''/../vendor/autoload.php''); require(__DIR__ . ''/../vendor/yiisoft/yii2/Yii.php''); $config = require(__DIR__ . ''/../config/web.php''); (new yii/web/Application($config))->run();

Archivo my-env.php:

<?php defined(''YII_DEBUG'') or define(''YII_DEBUG'', true); defined(''YII_ENV'') or define(''YII_ENV'', ''dev'');

my-env.php no se agregará al VCS. Puede existir o no. Si no, la aplicación se ejecuta automáticamente en modo de producción. my-env.php también podría ser colocado en la carpeta de configuración tal vez.

Esta es una pequeña mejora en comparación con el enfoque de Ankit, por lo que se puede agregar index.php al VCS. Por lo tanto, el repositorio de VCS contiene todos los archivos requeridos y se puede implementar sin ninguna modificación manual.


¿Tiene acceso al archivo de configuración donde configura los hosts virtuales? Si es así, puedes agregar setEnv YII_DEBUG "true" entre </Directory> y </VirtualHost>


Aquí está mi solución:

if ($_SERVER[''SERVER_NAME''] == ''localhost'' || $_SERVER[''SERVER_NAME''] == ''127.0.0.1'') { defined(''YII_DEBUG'') or define(''YII_DEBUG'', true); defined(''YII_ENV'') or define(''YII_ENV'', ''dev''); }

También para Heroku, Setup Yii2 Advanced en Heroku


Confirme index.php una vez y luego agréguelo a .gitignore . Para que no tengas que cambiarlo cada vez.

Simplemente agregue /web/index.php en .gitignore


Yii2 (o al menos la plantilla de aplicación avanzada) tiene un sistema de " environments ". En esta carpeta puede almacenar los archivos que cambian por entorno.

Esos archivos suelen ser los archivos de arranque ( index.php ) y los archivos de configuración "locales" (cosas que anulan la configuración principal).

La plantilla de la aplicación también tiene un comando " init " que le permite cambiar.

Básicamente, lo que sucede es que agrega la carpeta de environments completa a su VCS, pero ignora las ubicaciones donde se supone que terminen esos archivos (como Ankit ya se ha dicho). De esta manera, puede mantener todas las diferentes configuraciones dependientes del entorno en su VCS una al lado de la otra.

Consulte here para obtener más información y here para ver un ejemplo de cómo puede verse esta carpeta.


Yii2 trabaja con el compositor. Una pregunta es cómo manejar composer.lock .

En mis sitios de producción de Yii2, pongo composer.lock en .gitignore para poder decidir sobre las actualizaciones del compositor en función de los problemas de producción y mantener una versión de producción de composer.lock intacta durante un git pull para actualizar los sitios de producción.

Mis últimas líneas de .gitignore son:

# exclude composer.lock from versioning composer.lock