Yii2: ¿Cómo prepararse para el entorno de debugging y producción?

Sé que Yii define y usa las constantes YII_DEBUG y YII_ENV. Por supuesto, están configurados para 'verdadero' y 'dev' en mi máquina local. Esto se debe a que la plantilla básica de la aplicación lo ha preparado de esta manera en el file index.php . Este file me dice también que debería 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' por defecto. Eso está bien y lo entiendo. (Más información se puede encontrar 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 podría ser una máquina de testing también, por supuesto. ¿Qué opciones tengo? Creo que esto también es una cuestión de método de implementación. Actualmente, solo estoy presionando a través de Git a la máquina de producción, ¿qué es un deployment primitivo IMO …

¿Cómo lo haces? ¿Que sugieres?

EDITAR: En realidad, manejar los files params es el mismo problema.

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, Configuración Yii2 Advanced en Heroku

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

Esos files suelen ser sus files bootstrap ( index.php ) y files de configuration "locales" (cosas que anulan la configuration principal).

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

Básicamente, lo que sucede es que agrega los environments completos -carpeta a su VCS, pero ignora las ubicaciones donde se supone que terminan esos files (como ya se dijo en Ankit). De esta forma, puede mantener todas las diferentes configuraciones dependientes del entorno en su VCS una al lado de la otra.

Consulte aquí para get más información y aquí un ejemplo de cómo se puede ver esta carpeta.

Otra solución simple:

Archivo index.php (entra en el repository 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 colocarse en la carpeta config.

Esta es una pequeña mejora en comparación con el enfoque de Ankit, por lo que el index.php se puede agregar al VCS. Por lo tanto, el repository de VCS contiene todos los files necesarios y se puede implementar sin modificaciones manuales.

¿Tiene acceso al file de configuration donde configura los hosts virtuales? Si es así, solo puede agregar setEnv YII_DEBUG "true" entre </Directory> y </VirtualHost>

Comience index.php una vez y luego agréguelo a .gitignore . Para que no tengas que cambiarlo todo el time.

Simplemente agregue /web/index.php en .gitignore

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

En mis sitios de producción Yii2 puse composer.lock en .gitignore para poder decidir sobre las actualizaciones de los compositores dependiendo de los problemas de producción y mantener intacta una versión de producción de composer.lock 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