我想用与prod
环境相同的配置设置staging
环境。
根据文档,我进行如下操作:
我创建了一个指向prod
的staging
符号链接
- 在.env:
APP_ENV=staging
中配置env清空缓存: - 请求一个不存在的URL来触发404错误:http://localhost:8080/an-url-that-does-not-exists
php bin/console cache:clear
当APP_ENV=prod
,我的自定义错误页面呈现正确,但当APP_ENV=staging
,调试消息NotFoundHttpException
呈现?没有显示分析器。
我错过了什么?
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
和数组"environments"DotEnv
认为"类生产"。默认情况下,该数组只包含prod
。
您可以通过调用setProdEnvs()
:
DotEnv
的实例(new Dotenv())
->setProdEnvs(['prod', 'staging'])
->bootEnv(dirname(__DIR__).'/.env');
…但通常只要在.env
文件上禁用调试模式就足够了。