Yii2: Как подготовиться к отладочной и производственной среде?

Я знаю, что Yii определяет и использует константы YII_DEBUG и YII_ENV. Конечно, они настроены на 'true' и 'dev' на моей локальной машине. Это связано с тем, что основной шаблон приложения подготовил его таким образом в файле index.php. В этом файле также сообщается, что я должен удалить эти строки для производственного режима, то есть на производственной машине. Затем эти константы устанавливаются по умолчанию "false" и "prod". Все в порядке, и я это понимаю. (Более подробную информацию можно найти на Определение констант и Константы среды.)

Мой вопрос: Как лучше всего справиться с этими константами, когда index.php содержится в VCS? В одной среде они должны существовать, а в другом нет. Конечно, это может быть тестовая машина. Какие у меня варианты? Я думаю, что это также вопрос метода развертывания. В настоящее время я просто нажимаю на Git на производственную машину, что является примитивным развертыванием IMO...

Как вы это делаете? Что вы предлагаете?

EDIT: На самом деле обработка файлов params - это одна и та же проблема.

Ответы

Ответ 1

Здесь мое решение:

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

Также для Heroku, Настройка Yii2 Advanced на Heroku

Ответ 2

Еще одно простое решение:

Файл index.php(переходит в репозиторий 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();

Файл my-env.php:

<?php

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

my-env.php не будет добавлен в VCS. Он может существовать или нет. Если нет, приложение запускается автоматически в режиме производства. my-env.php может быть также помещен в папку config.

Это небольшое улучшение по сравнению с подходом Ankit, так что index.php можно добавить в VCS. Следовательно, репозиторий VCS содержит все необходимые файлы и может быть развернут без каких-либо ручных модификаций.

Ответ 3

Yii2 (или, по крайней мере, расширенный шаблон приложения) имеет систему "environments". В этой папке вы можете хранить файлы, которые изменяются для каждой среды.

Эти файлы обычно представляют собой файлы начальной загрузки (index.php) и "локальные" файлы конфигурации (вещи, которые переопределяют основную конфигурацию).

В шаблоне приложения также есть команда "init", которая позволяет вам переключаться.

В основном происходит то, что вы добавляете целую environments -панель в свой VCS, но игнорируете места, где должны быть эти файлы (как уже говорилось в Ankit). Таким образом, вы можете поддерживать все различные зависящие от среды конфигурации в своем VCS рядом друг с другом.

Смотрите здесь для получения дополнительной информации и здесь для примера того, как эта папка может выглядеть.

Ответ 4

У вас есть доступ к файлу конфигурации, в котором вы устанавливаете виртуальные хосты? Если это так, вы можете просто добавить setEnv YII_DEBUG "true" между </Directory> и </VirtualHost>

Ответ 5

Зафиксируйте index.php один раз, а затем добавьте его в .gitignore. Так что вам не нужно менять его каждый раз.

Просто добавьте /web/index.php в .gitignore

Ответ 6

Yii2 работает с композитором. Один вопрос заключается в том, как обращаться с composer.lock.

На моих производственных сайтах Yii2 я помещал composer.lock в .gitignore, поэтому я могу выбирать обновления композитора в зависимости от производственных проблем и сохранять производственную версию composer.lock нетронутой во время git pull для обновления производственных сайтов.

Мои последние строки .gitignore:

 # exclude composer.lock from versioning 
 composer.lock

Ответ 7

Может ли любой орган рассказать мне, как настроить переменную среды в приложении yii2? Я пытаюсь изменить переменную среды dev на prod, но она не работает