我正在尝试将一个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依赖项?
答案 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(用于本地替代)。在生产中,您有两个 选项:
- 创建“真实的”环境变量。设置环境变量的方式取决于您的设置:可以在命令行中设置它们, 在您的Nginx配置中,或通过您提供的其他方法 托管服务。
- 或者,像本地开发一样创建一个
.env.local
文件。
在Heroku上,实现#1的方法是使用Heroku管理的环境变量(通过CLI或它们的Web界面)。