将Symfony 4应用程序部署到Heroku(PHP致命错误:未捕获运行时异常:未定义App_ENV环境变量)

将Symfony 4应用程序部署到Heroku(PHP致命错误:未捕获运行时异常:未定义App_ENV环境变量),php,git,symfony,heroku,deployment,Php,Git,Symfony,Heroku,Deployment,我正在尝试将symfony应用程序部署到heroku,但在命令“git push heroku master”后,我出现了此错误 *远程:脚本缓存:清除返回,错误代码255 远程:!!PHP致命错误:未捕获的运行时异常: 未定义APP_ENV环境变量。你需要定义 用于配置的环境变量或将“symfony/dotenv”添加为 用于从.env文件加载变量的编写器依赖项。在里面 /tmp/build_c283120b0d4ffbcbe11960331dfe8069/bin/控制台:20 远程:!!堆栈

我正在尝试将symfony应用程序部署到heroku,但在命令“git push heroku master”后,我出现了此错误

*远程:脚本缓存:清除返回,错误代码255

远程:!!PHP致命错误:未捕获的运行时异常: 未定义APP_ENV环境变量。你需要定义 用于配置的环境变量或将“symfony/dotenv”添加为 用于从.env文件加载变量的编写器依赖项。在里面 /tmp/build_c283120b0d4ffbcbe11960331dfe8069/bin/控制台:20

远程:!!堆栈跟踪:

远程:#0{main}远程:!!投入 /第20行tmp/build_c283120b0d4ffbcbe11960331dfe8069/bin/控制台 远程:!!远程:通过调用Script@auto scripts 安装后cmd远程:!警告:APP_ENV环境 缺少远程变量:!运行'heroku config:set APP_ENV=prod'进行设置

远程:远程:!错误:依赖项安装失败

遥控器:!遥控器:!“composer安装”进程失败,原因是 一个错误。原因很遥远:!可能是下载或安装 包的数量,或预安装或远程安装:!安装后挂钩(例如a “脚本”中的“安装后命令”项远程:!在你的 “composer.json”

遥控器:!遥控器:!典型的错误情况是过时或错误 缺少部分代码,远程:!进行外部设置时超时 连接或内存限制

遥控器:!遥控器:!仔细检查上述错误输出,以便 确定远程故障的原因:!要解决问题,请确保代码正确 你推的是功能远程:!好的,就这些 本地更改已正确提交

遥控器:!遥控器:!有关上的PHP构建的详细信息 Heroku,请参阅远程:

遥控器:!遥控器:!提醒:以下警告已被删除 在建造过程中排放;遥控器:!检查上述详细信息,如图所示 它们可能与此错误有关:远程:!-APP_ENV 缺少环境变量

远程:远程:!推送被拒绝,未能编译PHP应用程序

远程:远程:!推送失败远程:正在验证部署*


我将.ENV文件上的行APP_ENV=dev更改为APP_ENV=prod,但没有任何更改。。。有什么想法吗?如何添加“symfony/dotenv”作为编写器依赖项?

错误消息非常清楚:

您需要为配置或添加定义环境变量 “symfony/dotenv”作为从 .env文件

仅仅创建一个
.env
文件是不够的!您还必须添加
symfony/dotenv
作为symfony实际使用
.env
文件中定义的环境变量的编写器依赖项

运行以下命令并重新部署应用程序以解决问题:

composer require symfony/dotenv
解决此问题的另一种方法是配置Heroku,以便在运行应用程序时提供
APP_ENV
环境变量

heroku config:set APP_ENV=prod

只是为了增加另一个视角。。。Heroku特别建议不要使用
symfony/dotenv
。。。所以这个问题的正确答案很简单:你没有

实际上,使用
.env
文件会降低灵活性,因为将环境变量放入代码中意味着如果要更改它们,就需要推送新的构建。不要忘记,您正在将通常认为是安全的东西放入代码库中,从安全角度来看,这是一个相当大的禁忌()

以下是Heroku关于这个话题的最新文章。环境变量部分末尾的注释说明:

建议不要在中使用
symfony/dotenv
包 而是设置所有必需的环境变量 显式使用heroku配置。从require移动
symfony/dotenv
在您的
composer.json
中要求dev将确保
.env
首先不会从应用程序根目录中提取文件。 这相当于

作为参考,链接的Symfony文档如下所示:

大多数Symfony应用程序从环境中读取其配置 变量。在本地开发时,您通常将这些存储在 .env和.env.local(用于本地替代)。在制作方面,你有两个 选项:

  • 创建“真实”环境变量。如何设置环境变量取决于您的设置:可以在命令行中设置环境变量, 在Nginx配置中,或通过 托管服务
  • 或者,像本地开发一样创建一个
    .env.local
    文件
  • 在Heroku上,实现#1的方法是使用Heroku管理的环境变量(使用CLI或其web界面)