将Symfony 4 App部署到Heroku(PHP致命错误:Uncaught RuntimeException:APP_ENV环境变量未定义)

时间:2018-10-05 13:23:00

标签: php git symfony heroku deployment

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

  

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

     

远程:!! PHP致命错误:未捕获的RuntimeException:   未定义APP_ENV环境变量。您需要定义   用于配置的环境变量或将“ symfony / dotenv”添加为   Composer依赖项以从.env文件加载变量。在   / tmp / build_c283120b0d4ffbcbe11960331dfe8069 / bin / console:20

     

远程:!!堆栈跟踪:

     

远程:!! #0 {main}远程:!!扔进去   / tmp / build_c283120b0d4ffbcbe11960331dfe8069 / bin /控制台在第20行   远程:! remote:脚本@ auto-scripts通过以下方式调用   post-install-cmd远程:警告:APP_ENV环境   变量缺少远程:!运行'heroku config:set   APP_ENV = prod'进行设置。

     

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

     

远程:!远程:! “ composer安装”过程失败,原因是   一个错误。远程原因:!可能是下载或安装   包,或pre或remote :!安装后挂钩(例如   “脚本”中的“ post-install-cmd”项)远程:!在你的   'composer.json'。

     

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

     

远程:!远程:!仔细检查以上错误输出   确定远程原因:问题,确保代码   您正在推动的是远程运行的功能!正确地,那一切   本地更改已正确提交。

     

远程:!远程:!有关PHP构建的更多信息,请参见   Heroku,请参阅远程:!
  https://devcenter.heroku.com/articles/php-support

     

远程:!远程:!提醒:以下警告是   在构建过程中发出;远程:!检查上面的详细信息,如   它们可能与此错误有关:remote:! -APP_ENV   环境变量丢失

     

远程:远程:!推送被拒绝,无法编译PHP应用。

     

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

我将.env文件上的APP_ENV = dev行更改为APP_ENV = prod,但没有任何改变...任何想法吗?如何添加“ symfony / dotenv”作为Composer依赖项?

2 个答案:

答案 0 :(得分:1)

此错误消息非常清楚:

  

您需要定义环境变量以进行配置或添加   “ symfony / dotenv”作为Composer依赖项,可从   .env文件。

仅创建.env文件还不够!您还必须添加symfony/dotenv作为symfony的Composer依赖项,才能实际使用.env文件中定义的环境变量。

运行以下命令,然后重新部署您的应用程序以解决问题:

composer require symfony/dotenv

解决此问题的另一种方法是将Heroku配置为在运行应用程序时提供APP_ENV环境变量。

heroku config:set APP_ENV=prod

答案 1 :(得分:0)

只需添加另一个视角... Heroku特别推荐使用symfony/dotenv ...,因此,此问题的正确答案很简单:您不知道。

实际上,使用.env文件会降低灵活性,因为将环境变量放入代码中意味着如果要更改它们,则需要推送新的构建。并且不要忘记您将通常应该保密的内容放入代码库的事实,从安全角度来看,这是一个很大的禁忌(here's one of many articles on the topic)。

这是Heroku关于主题Deploying Symfony 4 Apps on Heroku的最新文章。 “环境变量”部分末尾的注释说:

建议您不要在其中使用symfony/dotenv软件包 生产,而是设置所有必需的环境变量 明确使用heroku config。将symfony/dotenv从要求中移出 require-dev中的composer.json.env 最初不会从应用程序根目录中拾取文件。 这对应于option #2 in post-deploy step B of the Symfony documentation

供参考,链接的Symfony文档说:

大多数Symfony应用程序从环境中读取其配置 变量。在本地进行开发时,通常会将它们存储在 .env和.env.local(用于本地替代)。在生产中,您有两个 选项:

  1. 创建“真实的”环境变量。设置环境变量的方式取决于您的设置:可以在命令行中设置它们, 在您的Nginx配置中,或通过您提供的其他方法 托管服务。
  2. 或者,像本地开发一样创建一个.env.local文件。

在Heroku上,实现#1的方法是使用Heroku管理的环境变量(通过CLI或它们的Web界面)。

相关问题