【问题标题】:PHP Fatal error: Uncaught RuntimeException: APP_ENV environment variable is not definedPHP 致命错误:未捕获的 RuntimeException:未定义 APP_ENV 环境变量
【发布时间】:2019-05-09 23:21:27
【问题描述】:

我正在生产环境中部署 Symfony 4 项目。 创建 .env 文件,内容如下:

APP_ENV=prod
APP_DEBUG=0

运行作曲家:

$ composer install --no-dev --optimize-autoloader

得到错误:

Script cache:clear returned with error code 255
!!  PHP Fatal error:  Uncaught RuntimeException:
 APP_ENV environment variable is not defined.
 You need to define environment variables for
 configuration or add "symfony/dotenv" as a Composer
 dependency to load variables from a .env file. in 
/var/www/symfony4_project/bin/console:20
!!  Stack trace:
!!  #0 {main}
!!    thrown in /var/www/symfony4_project/bin/console on line 20
!!  
Script @auto-scripts was called via post-install-cmd

关于部署和环境设置的 Symfony 文档非常狭窄和模糊。

不清楚我应该在哪里设置生产环境。

来自https://symfony.com/doc/current/configuration.html

sentence "如果你决定在生产环境中设置真实的环境变量,如果 Symfony 检测到真​​实的 APP_ENV 环境变量存在并设置为 prod,则不会加载 .env 文件。"

我应该在哪里寻找这个真正的 APP_ENV 存在?

正如我在 stackoverflow 和 github 上发现的,存在很多问题,但答案并不多。

感谢您的帮助。

【问题讨论】:

标签: symfony environment-variables environment symfony4 production-environment


【解决方案1】:

我需要更多信息来解决您的问题。

首先 - 只是为了确定:您是否按照调试消息中的提示将 dotenv 依赖项添加到作曲家:composer require symfony/dotenv

另外,它是什么类型的 symfony 安装?只是一个基本的 symfony/骨架? 一般来说,如果你刚刚安装了一个基本的 symfony/sekleton 或网站骨架,改变 .env 中 APP_ENV 的值应该可以工作!但我们会解决的。

请验证您是否安装了 dotenv 并提供我要查找的信息。

【讨论】:

  • 它是 Symfony4。我不知道如何将dotenv依赖添加到composer。
【解决方案2】:

您需要安装 symfony/dotenv composer 包来加载您的 .env 文件。 看看官方文档https://symfony.com/doc/current/components/dotenv.html Dotenv 组件解析 .env 文件以使环境变量可访问。

运行composer require symfony/dotenv 这应该可以工作。

【讨论】:

  • 很高兴为您提供帮助,请您投票并确认我的答案
  • 艾哈迈德,我知道你的答案。我需要 15 点声望,让它可见。谢谢,再来一次。
  • @fama23 是否需要 --dev?最初的问题是关于产品部署的!
  • 不,不需要,我将从答案中删除。应该为所有 nev 安装 Dotenv。谢谢
【解决方案3】:

如果自 2019 年 Flex 1.2 以来您在 prod 中遇到此错误,并且您不想使用 .env 文件而是系统的环境变量:

这是因为变化: https://symfony.com/blog/new-in-symfony-flex-1-2请在博客上阅读改进了.env 文件的处理

按顺序:

  1. 你必须将你的 .env 推送到 git,但只有这个 .env 文件
  2. Developers 将创建 .env.local 以覆盖 .env 文件供 dev
  3. symfony/dotenv 位于 composer.json 的 require-dev 部分
  4. 当你想部署时:

    1. 获取 git 存储库(当然没有 /vendors)
    2. 运行composer dump-env prod --empty生成.env.local.php文件
    3. 通过composer install --no-dev [Other prod args] 安装您的依赖项

您现在可以在没有安装 symfony/dotenv 复合材料的情况下享受您的 prod 环境。

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2021-11-03
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多