如何在不显示调试信息的情况下,根据产品配置的符号链接设置暂存环境?
How to set up a staging environment based on a symlink to prod configuration, without showing debug information?
我想设置一个 staging
环境,其配置与 prod
环境相同。
根据the docs,我进行如下操作:
我创建了一个指向 prod
的 staging
符号链接
- 在 .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
呈现?
分析器未显示。
我错过了什么?
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
.
您可以通过调用 setProdEnvs()
:
来修改 DotEnv
的实例
(new Dotenv())
->setProdEnvs(['prod', 'staging'])
->bootEnv(dirname(__DIR__).'/.env');
...但通常只需在 .env
文件上禁用调试模式就足够了。
我想设置一个 staging
环境,其配置与 prod
环境相同。
根据the docs,我进行如下操作:
我创建了一个指向 prod
staging
符号链接
- 在 .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
呈现?
分析器未显示。
我错过了什么?
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
.
您可以通过调用 setProdEnvs()
:
DotEnv
的实例
(new Dotenv())
->setProdEnvs(['prod', 'staging'])
->bootEnv(dirname(__DIR__).'/.env');
...但通常只需在 .env
文件上禁用调试模式就足够了。