Изменение среды по умолчанию в Laravel 4
В Laravel 4 среда конфигурации по умолчанию - "производство". Это означает, что если вы запустите команду artisan без опции --env
, она предполагает конфигурацию производства. Это можно увидеть в \Illuminate\Foundation\Application::detectWebEnvironment()
, который вызывается detectConsoleEnvironment()
, когда не установлена опция --env
.
Такое поведение стало риском в моей среде разработки. Очень легко забыть опцию --env и, скажем, непреднамеренно запустить миграцию в вашей производственной базе данных. (Да, это произошло, но, к счастью, это было незначительное изменение.) Я близок к простому переименованию конфигурации моей производственной среды в "реальное производство", но похоже, что должно быть более элегантное решение.
TL; DR
Как я могу изменить среду по умолчанию в Laravel 4, так что команды artisan не запускаются по умолчанию по умолчанию?
Ответы
Ответ 1
Спасибо Антонио за то, что он предложил мне пересмотреть обнаружение домена.
$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
будет работать. Я также подтвердил, что это не мешает обнаружению среды производства или тестирования.
Ответ 2
В 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'];
});
Ответ 3
Вы можете попробовать изменить файл app/start.php, чтобы добавить второй параметр в желаемую среду как ИСТИНА, т.е.
для включения локальной среды это выглядит как
$env = $app->detectEnvironment(array(
'local' => array('homestead',true),
));
Ответ 4
Одно из самых элегантных решений, которые я нашел, из этого сообщения в блоге:
http://stevegrunwell.com/blog/laravel-application-environment/
Преимущества:
- Не нужно жестко кодировать массив машин разработки в файл git
start.php
.
- Отказ от переменных окружающей среды сервера в производстве.
- Простая локальная среда разработки, изменяя файл
environment.php
.
Ответ 5
$env = $app->detectEnvironment(array(
'staging' => array('baichebao_test'),
'local' => array('*.local', '*'),
));
как и мой пример, поместите среду по умолчанию в последний элемент массива и добавьте "*" в это имя хоста менеджера. и он работает в laravel 4.X
Ответ 6
В Laravel 4.2 вы не сможете совершать деструктивные миграции ремесленников без запроса:
Деструктивные операции миграции теперь требуют подтверждения или -force при запуске в процессе производства.
Журнал изменений для 4.2 здесь