В Laravel 4 среда конфигурации по умолчанию – «производство». Это означает, что если вы запустите команду artisan без опции --env
, она предполагает конфигурацию производства. Это можно увидеть в \Illuminate\Foundation\Application::detectWebEnvironment()
который вызывается detectConsoleEnvironment()
когда не --env
опция --env
.
Такое поведение стало риском в моей среде разработки. Очень легко забыть опцию –env и, скажем, непреднамеренно запустить миграцию в вашей производственной базе данных. (Да, это произошло, но, к счастью, это было незначительное изменение.) Я близок к простому переименованию конфигурации моей производственной среды в «реальное производство», но похоже, что должно быть более элегантное решение.
TL; DR
Как изменить среду по умолчанию в Laravel 4, так что команды мастеров не запускаются по умолчанию?
Спасибо Антонио за то, что он попросил меня пересмотреть обнаружение домена.
$env = $app->detectEnvironment(array( ( // Empty string is to set development as the default environment for // artisan commands. 'development' => array('dev.foo.com', ''), 'test' => array('test.foo.com'), 'production' => array('www.foo.com', 'foo.com'), ));
Добавление '' в качестве домена разработки эффективно устанавливает разработку как среду по умолчанию для команд-ремесленников, по-видимому, потому, что имя домена пустое, когда приложение вызывается из командной строки. Я тестировал и, кажется, что-то == false
будет работать. Я также подтвердил, что это не мешает обнаружению среды производства или тестирования.
В bootstrap / start.php вы можете установить среду:
$env = $app->detectEnvironment(function() { return 'development'; });
Но вы можете делать много вещей, таких как:
$env = $app->detectEnvironment(array( 'local' => array('your-machine-name'), ));
А также
$env = $app->detectEnvironment(function() { return $_SERVER['MY_LARAVEL_ENV']; });
Вы можете попробовать изменить файл app / start.php, чтобы добавить второй параметр в желаемой среде как ИСТИНА, т.е. включить локальную среду, это выглядит
$env = $app->detectEnvironment(array( 'local' => array('homestead',true), ));
Одно из самых элегантных решений, которые я нашел, – это сообщение в блоге: http://stevegrunwell.com/blog/laravel-application-environment/
Преимущества:
start.php
. environment.php
. $env = $app->detectEnvironment(array( 'staging' => array('baichebao_test'), 'local' => array('*.local', '*'), ));
как и мой пример, поместите среду по умолчанию в последний элемент массива и добавьте «*» к его имени хоста менеджера. и он работает в laravel 4.X
В Laravel 4.2 вы не сможете совершать деструктивные миграции ремесленников, не будучи вызванными:
Операции разрушительной миграции теперь требуют подтверждения или -force при запуске на производстве.
Журнал изменений для 4.2 здесь