heroku此页面无法使用interfaceapp.herokuapp.com当前无法处理此请求.HTTP错误500



在过去的一周里,我一直试图部署在heroku上,了解系统及其工作方式,一个接一个地构建,一个又一个地调试,现在我遇到了一个错误,我不知道该朝哪个方向发展,我已经在heroku上部署了一个symfony/Bootstrap aoo,构建进展顺利,现在我试图接受应用程序url,我得到了一个

'

This page isn’t working interfaceapp.herokuapp.com is currently unable to handle this request.
HTTP ERROR 500 

',部署日志上没有显示任何内容,我必须了解为什么会出现此错误。

在四处寻找解决方案后,我偶然发现了一个非常有趣的heroku-cli命令heroku-logs-a app_name。

我有这样的输出:

[13-Nov-2020 10:11:15 UTC] PHP Fatal error:  Uncaught SymfonyComponentDotenvExceptionPathException: Unable to read the "/app/.env" environment file. in /app/vendor/symfony/dotenv/Dotenv.php:565
2020-11-13T10:11:15.142981+00:00 app[web.1]: Stack trace:
2020-11-13T10:11:15.143161+00:00 app[web.1]: #0 /app/vendor/symfony/dotenv/Dotenv.php(92): SymfonyComponentDotenvDotenv->doLoad()
2020-11-13T10:11:15.143350+00:00 app[web.1]: #1 /app/vendor/symfony/dotenv/Dotenv.php(114): SymfonyComponentDotenvDotenv->load()
2020-11-13T10:11:15.143543+00:00 app[web.1]: #2 /app/vendor/symfony/dotenv/Dotenv.php(157): SymfonyComponentDotenvDotenv->loadEnv()
2020-11-13T10:11:15.143701+00:00 app[web.1]: #3 /app/public/index.php(10): SymfonyComponentDotenvDotenv->bootEnv()
2020-11-13T10:11:15.143724+00:00 app[web.1]: #4 {main}

这意味着我的应用程序无法读取我的.env文件,因为这是我第一次部署具有阶段和产品分支的项目,我从两个存储库中删除了.env(需要指出的是,Heroku连接到了我的github存储库(。

来自其他分支的.env文件包含数据库和app_env的dev-env变量。所以我所做的是,我去了我的heroku应用程序面板,点击了我的暂存应用程序,然后去了同一个地方,创建了一个值为stagingAPP_ENV变量。我添加了postgresql插件,在该插件上自动创建了一个附带生成值的DATABASE_URL变量。

现在,为了实现这一切,我必须在github repo上为我的暂存分支创建一个.env文件,标准.env的复制粘贴完成了这项工作,为了能够做到这一点,我显然必须删除附加在APP_ENVDATABASE_URL变量上的值,然后提交并推送它。在Heroku上运行另一个构建,现在我的应用程序索引页面终于显示出来了,错误也消失了:(。

一些基于您自己答案的解释。

.env文件是必需的,应该提交到您的存储库中。但是,由于该文件已提交给repo,因此不应包含任何敏感信息。将其视为确保定义所有必需的环境变量的一种方式(即使它们具有无效值,如PASSWORD=XXXXXXXXXX(。它也可以被视为创建.env.local或真实环境变量的模板。您还可以包括跨环境的默认不敏感值。但关键是不要在该文件中提交敏感信息。

然后,您将使用.env.local文件(默认情况下在存储库中被忽略(来覆盖.env文件中的值。这个.env.local文件将特定于部署应用程序的每个环境。.env.local中定义的变量将胜过.env.中定义的那些变量

真实的环境变量总是胜过.env和.env.local文件中定义的变量。

对于Heroku部署,我会使用真实的环境变量,因为它最适合这样做,并且不需要在部署时使用某种挂钩来编写文件。

更多信息可以在这里找到:https://symfony.com/doc/current/configuration.html#overriding-通过env本地的环境值

最新更新