web-dev-qa-db-fra.com

Yii2: Comment se préparer à l'environnement de débogage et de production?

Je sais Yii définit et utilise les constantes YII_DEBUG et YII_ENV. Bien sûr, ils sont définis sur "true" et "dev" sur ma machine locale. C'est parce que le modèle d'application de base l'a préparé de cette façon dans le index.php = fichier. Ce fichier me dit également que je devrais supprimer ces lignes pour le mode de production, c'est-à-dire sur la machine de production. Ensuite, ces constantes sont définies sur "false" et "prod" par défaut. Tout va bien et je le comprends. (Plus des informations peuvent être trouvées sur Définir les constantes et Constantes d'environnement .)

Ma question: Comment puis-je gérer au mieux ces constantes lorsque index.php est contenu dans VCS? Dans un environnement, elles devraient exister, dans l'autre non. Et cela pourrait aussi être une machine de test, bien sûr. Quelles options ai-je? Je pense que c'est aussi une question de méthode de déploiement. Actuellement, je pousse simplement via Git vers la machine de production, ce qui est un déploiement primitif IMO ...

Comment faites-vous? Que suggérez-vous?

EDIT: En fait, la gestion des fichiers params est le même problème.

18
robsch

Voici ma solution:

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');
}

Aussi pour Heroku, Configuration Yii2 Advanced sur Herok

7
Chloe

Yii2 (ou au moins le modèle d'application avancé) a un système de "environments". Dans ce dossier, vous pouvez stocker les fichiers qui changent par environnement.

Ces fichiers sont généralement vos fichiers bootstrap (index.php) et les fichiers de configuration "locaux" (ce qui remplace la configuration principale).

Le modèle d'application possède également une commande "init" qui vous permet de basculer.

Fondamentalement, ce qui se passe est que vous ajoutez le dossier environments- entier à votre VCS, mais vous ignorez les emplacements où ces fichiers sont censés se retrouver (comme Ankit l'a déjà dit). De cette façon, vous pouvez conserver les différentes configurations dépendantes de l'environnement dans votre VCS côte à côte.

Voir ici pour un peu plus d'informations et ici pour un exemple de l'apparence de ce dossier.

5
Blizz

Une autre solution simple:

Fichier index.php (va dans le dépôt 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();

Fichier my-env.php:

<?php

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

my-env.php ne sera pas ajouté au VCS. Cela peut exister ou non. Sinon, l'application s'exécute automatiquement en mode production. my-env.php pourrait également être placé dans le dossier config.

Il s'agit d'une petite amélioration par rapport à l'approche d'Ankit, de sorte que l'index.php peut être ajouté au VCS. Par conséquent, le dépôt VCS contient tous les fichiers requis et peut être déployé sans aucune modification manuelle.

5
robsch

Avez-vous accès au fichier de configuration où vous définissez les hôtes virtuels? Si oui, vous pouvez simplement ajoutersetEnv YII_DEBUG "true" entre </Directory> et </VirtualHost>

5

Validez index.php une fois, puis ajoutez-le à . Gitignore. Pour que vous n'ayez pas à le changer à chaque fois.

Ajoutez simplement /web/index.php in . gitignore

2
ankitr

Yii2 travaille avec le compositeur. Une question est de savoir comment gérer composer.lock.

Dans mes sites de production Yii2 j'ai mis composer.lock à .gitignore pour que je puisse décider des mises à jour composer en fonction des problèmes de production et conserver une version de production de composer.lock intact pendant un git pull pour la mise à jour des sites de production.

Mes dernières lignes de .gitignore sont:

 # exclude composer.lock from versioning 
 composer.lock
0
WeSee