gpt4 book ai didi

symfony - Symfony 应用程序启动时出现错误 500 "PHP Fatal error: Uncaught RuntimeException: APP_ENV environment variable is not defined."

转载 作者:行者123 更新时间:2023-12-02 15:03:46 35 4
gpt4 key购买 nike

我最近将一个新的 Symfony 4 项目部署到生产服务器,我在其中设置(通过 ssh)APP_ENVAPP_SECRET 作为环境变量。 printenvset 这两个命令都在其输出中列出了这些变量,因此我认为该部分的一切都应该没问题。

不过,我在网站上收到错误 500,日志返回 PHP fatal error :未捕获 RuntimeException:未定义 APP_ENV 环境变量。您需要为配置定义环境变量或将“symfony/dotenv”添加为 Composer 依赖项以从 .env 文件加载变量。

我在这里错过了什么?

最佳答案

[EDIT 2020] --> 使用 'symfony/dotenv'

根据how to deploy官方文档你可以做的是将你的 Composer 文件中的'symfony/dotenv'从require-dev移动到require,所以它也安装在生产环境中。然后你可以继续使用 .env.local 文件。

如果您不想或不能使用 'symfony/dotenv'

对于 Apache 和 Ubuntu,您首先需要 mod_env激活

sudo a2enmod env
sudo service apache2 restart

然后将环境变量放入 .htacess 或虚拟主机配置文件中。对于 SF4,.htacess 位于/public 中,语法如下。我不知道顺序是否重要,我会说不,所以我将它们添加到文件的顶部。

SetEnv APP_ENV prod
SetEnv APP_SECRET fjsdkfj...
SetEnv DATABASE_URL mysql://...

现在一些随机有用的技巧:

  • 您不想提交 .htaccess 文件。将它添加到部署工具的共享部分。在我的例子中(easy-deploy-bundle)

    ->sharedFilesAndDirs(['public/.htaccess'])
  • 您需要复制/etc/environment 中的环境变量,以便 composer 可以使用它……这真的很麻烦,因为现在您复制了变量。所以 Symfony 团队说 env 变量更好,因为更安全和标准。但是复制信息一点也不安全。也许我做错了(这完全有可能)。如果您知道如何避免这种情况,请分享。printenv 命令将显示它是否已正确配置。

  • 如果您使用 easy-deploy-bundle 进行生产,请删除 composer 上的 --quiet 选项,这样如果它失败(例如,因为它找不到 env 变量),您会收到一条明确的错误消息。还要检查 --no-dev 选项在这里,所以它不会安装 dotenv 包。

    ->composerInstallFlags('--prefer-dist --no-interaction --no-dev')

关于symfony - Symfony 应用程序启动时出现错误 500 "PHP Fatal error: Uncaught RuntimeException: APP_ENV environment variable is not defined.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48028359/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com