如何在不显示调试信息的情况下,根据产品配置的符号链接设置暂存环境?

How to set up a staging environment based on a symlink to prod configuration, without showing debug information?

我想设置一个 staging 环境,其配置与 prod 环境相同。

根据the docs,我进行如下操作:

我创建了一个指向 prod

staging 符号链接

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_ENVDotEnv 认为“类似于生产”的一系列“环境”进行比较。默认情况下,此数组仅包含 prod.

您可以通过调用 setProdEnvs():

来修改 DotEnv 的实例
(new Dotenv())
    ->setProdEnvs(['prod', 'staging'])
    ->bootEnv(dirname(__DIR__).'/.env');

...但通常只需在 .env 文件上禁用调试模式就足够了。