PHP致命错误:未捕获RuntimeException:未定义APP_ENV环境变量

时间:2018-12-08 11:57:34

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

我正在生产中部署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

语句“如果您决定在生产环境中设置真实的环境变量,则如果Symfony检测到存在真实的APP_ENV环境变量并将其设置为prod,则不会加载.env文件。

我应该在哪里寻找APP_ENV的真实存在?

正如我在stackoverflow和github上发现的那样,实现了很多问题,但没有太多答案。

感谢帮助。

3 个答案:

答案 0 :(得分:2)

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

运行composer require --dev symfony/dotenv,应该可以。

答案 1 :(得分:0)

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

首先-请确保:是否按照调试消息中的提示将dotenv依赖项添加到了作曲家:作曲家需要symfony / dotenv

此外,它是一种什么样的symfony安装?只是基本的symfony /骨骼? 通常,如果您只是安装了基本的symfony / sekleton或网站骨架,则更改.env中APP_ENV的值应该可以!但是我们会解决的。

请确认您已安装dotenv并提供所需的信息。

答案 2 :(得分:0)

如果自2019年Flex 1.2起在生产中出现此错误,并且您不想使用.env文件,而是要使用系统的环境变量:

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

顺序:

  1. 您必须将 .env推送到git 上,但仅此 .env 文件
  2. 开发人员将创建 .env.local 以覆盖开发人员的 .env 文件
  3. symfony / dotenv 位于composer.json的 require-dev 部分
  4. 要部署时:

    1. 获取git repo(当然不带/ vendors)
    2. 运行composer dump-env prod --empty生成一个.env.local.php文件
    3. 通过composer install --no-dev [其他产品参数]
    4. 安装依赖项

现在,您无需安装 symfony / dotenv 作曲家就可以享受产品环境。