2013-12-18 19 views
11

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

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

TL; DR

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

+0

Я думаю, [этот ответ] [1] является то, что вы ищете ... [1]: http://stackoverflow.com/a/19739750/1272001 – clod986

+0

Я не знаю ваших настроек, но в общие разработчики, постановка и производство не должны иметь доступ к переменные окружения, что означает, что вы сделали это было бы невозможно. Скорее, безопаснее иметь производство по умолчанию, так как среда разработки потенциально утешает конфиденциальную информацию, например, в сообщениях об ошибках. В Laravel есть документация об этом здесь: http://laravel.com/docs/configuration#protecting-sensitive-configuration –

ответ

12

Спасибо Антонио для наведения мне пересмотреть обнаружение домена.

$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 будет работать. Я также подтвердил, что это не мешает обнаружению среды производства или тестирования.

+6

Поскольку выпуск определения домена Laravel 4.1 больше невозможен для принятия решения об окружающей среде, это означает, что этот ответ больше не работает. http://laravel.com/docs/upgrade#upgrade-4.1 –

+0

Возможно, вам просто нужно сделать это вручную (против использования 'detectEnvironment'). Не рекомендуется, хотя некоторые из этих глобальных глобалов PHP могут быть подделаны в некоторых случаях (в зависимости от конфигурации вашего сервера). Использование 'hostname' немного глупо для тех из нас, кто работает на многих серверах с разными именами хостов (например, EC2). – Tom

9

В загрузчике/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']; 
}); 
+0

Я знаю об этом и использую второй метод для соответствия домену. Это на самом деле дает мне хорошую идею и ... да. Установка 'development' => array ('') эффективно устанавливает «развитие» в качестве среды по умолчанию для ремесленника. Я проверил, и это не мешает нормальному обнаружению среды по домену. –

0

В Laravel 4.2 вы не сможете сделать разрушительные ремесленных миграции без запроса:

операции Разрушительной миграции в настоящее время требует подтверждения или --force при его запуске в производстве.

Change log for 4.2 is here

2

Одним из наиболее элегантное решение, которое я нашел в этом блоге: http://stevegrunwell.com/blog/laravel-application-environment/

Преимущества:

  1. Нет необходимости жёстко массив разработка машин в файл git, зафиксированный start.php.
  2. Резервные переменные окружающей среды на производстве.
  3. Простая локальная среда разработки, изменяя файл environment.php.
1
$env = $app->detectEnvironment(array(

     'staging' => array('baichebao_test'), 
     'local' => array('*.local', '*'), 
)); 

как мой, например, поместить среду по умолчанию в последний элемент массива, а также добавить «*», чтобы это менеджер имя хоста. и он работает в Laravel 4.X

3

Вы можете попробовать модифицировать файл приложения/start.php добавить второй параметр на нужной среде, как ИСТИНА т.е. , чтобы включить локальную окружающую среду, похоже,

$env = $app->detectEnvironment(array(

    'local' => array('homestead',true), 

)); 
Смежные вопросы