Как настроить промежуточную среду на основе символической ссылки на конфигурацию prod без отображения отладочной информации?

#php #symfony #symfony5

#php #symfony #symfony5

Вопрос:

Я хотел бы настроить staging среду с той же конфигурацией, prod что и среда.

Согласно документам, я действую следующим образом:

Я создаю staging символическую ссылку, которая указывает на prod

  • настройте env в .env: APP_ENV=staging
  • очистить кэш: php bin/console cache:clear
  • запрашивать URL, который не существует, чтобы вызвать ошибку 404: http://localhost:8080/an-url-that-does-not-exists

Когда APP_ENV=prod моя пользовательская страница ошибок отображается правильно, но когда APP_ENV=staging отображается сообщение отладки NotFoundHttpException ? Профилировщик не отображается.

Чего мне не хватает?

Ответ №1:

tldr;

Создайте .env.staging файл и используйте его для установки APP_DEBUG 0 . Режим отладки и среда устанавливаются независимо.


По умолчанию, если вы не задали его явно, режим отладки ( APP_DEBUG ) устанавливается из среды автоматически.

Это происходит на следующих этапах:

В вашем интерфейсном контроллере ( index.php обычно) вы найдете эту строку:

 (new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
 

И далее DotEnv::bootEnv() вы найдете это:

 $debug = $_SERVER[$k] ?? !in_array($_SERVER[$this->envKey], $this->prodEnvs, true);
 

Это позволит сравнить вашу APP_ENV с массивом «сред», которые DotEnv считаются «производственными». По умолчанию этот массив включает только prod .

Вы можете изменить экземпляр DotEnv , вызвав setProdEnvs() :

 (new Dotenv())
    ->setProdEnvs(['prod', 'staging'])
    ->bootEnv(dirname(__DIR__).'/.env');
 

… но, как правило, достаточно просто отключить режим отладки в вашем .env файле.

Комментарии:

1. идеальный ответ, это то, что я искал. Спасибо @yivi.