Подтвердить что ты не робот

Изменение среды по умолчанию в Laravel 4

В Laravel 4 среда конфигурации по умолчанию - "производство". Это означает, что если вы запустите команду artisan без опции --env, она предполагает конфигурацию производства. Это можно увидеть в \Illuminate\Foundation\Application::detectWebEnvironment(), который вызывается detectConsoleEnvironment(), когда не установлена ​​опция --env.

Такое поведение стало риском в моей среде разработки. Очень легко забыть опцию --env и, скажем, непреднамеренно запустить миграцию в вашей производственной базе данных. (Да, это произошло, но, к счастью, это было незначительное изменение.) Я близок к простому переименованию конфигурации моей производственной среды в "реальное производство", но похоже, что должно быть более элегантное решение.

TL; DR

Как я могу изменить среду по умолчанию в Laravel 4, так что команды artisan не запускаются по умолчанию по умолчанию?

4b9b3361

Ответ 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 здесь