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, но она не работает