Intereting Posts
Как легко минимизировать JS в PHP … Или что-то еще Доступ к классу sfConfig в приложениях / appname / lib Как выбрать несколько файлов для загрузки? Рекомендации по реализации простого регулярного выражения (для синтаксического анализа bbcode / geshi) Преобразование временной строки в десятичные часы PHP Php – заменить базовый цвет прозрачного png изображения CodeIgniter + Командная строка + Cron + Cpanel PHP: функция группировки массива объектов по значению php генерирует все комбинации из заданного массива Ошибка Dropbox при запросе токена доступа Заполнение списка выпадающего меню после проверки формы отправки Как объединить 2 ассоциативных массива в php, чтобы мы не перезаписывали любые повторяющиеся записи во всех случаях? THttpClient не удалось открыть поток: HTTP-запрос не удался! Неверный запрос HTTP / 1.1 400 открытие документа MS word без использования com-объекта Url скрыть с помощью codeigniter

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

В 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/

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

  1. Нет необходимости жестко кодировать массив машин разработки в файл git start.php .
  2. Отказ от переменных окружающей среды сервера в производстве.
  3. Легко сохраняйте локальную среду разработки, изменяя файл environment.php .
 $env = $app->detectEnvironment(array( 'staging' => array('baichebao_test'), 'local' => array('*.local', '*'), )); 

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

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

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

Журнал изменений для 4.2 здесь