heroku 此页面无法正常工作 interfaceapp.herokuapp.com 目前无法处理此请求。 HTTP 错误 500
heroku this page isn’t working interfaceapp.herokuapp.com is currently unable to handle this request. HTTP ERROR 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 Symfony\Component\Dotenv\Exception\PathException: 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): Symfony\Component\Dotenv\Dotenv->doLoad()
2020-11-13T10:11:15.143350+00:00 app[web.1]: #1 /app/vendor/symfony/dotenv/Dotenv.php(114): Symfony\Component\Dotenv\Dotenv->load()
2020-11-13T10:11:15.143543+00:00 app[web.1]: #2 /app/vendor/symfony/dotenv/Dotenv.php(157): Symfony\Component\Dotenv\Dotenv->loadEnv()
2020-11-13T10:11:15.143701+00:00 app[web.1]: #3 /app/public/index.php(10): Symfony\Component\Dotenv\Dotenv->bootEnv()
2020-11-13T10:11:15.143724+00:00 app[web.1]: #4 {main}
这意味着我的应用程序无法读取我的 .env
文件,因为这是我第一次部署具有 stage 和 prod 分支的项目,我从两个存储库中删除了 .env
(需要指出的是,Heroku 已连接到我的 github 存储库)。
我的 .env
来自其他分支的文件包含数据库的开发环境变量和 app_env。所以我所做的是转到我的 heroku 应用程序仪表板,单击我的暂存应用程序,然后转到相同的地方并创建一个值为 staging
的 APP_ENV
变量。我添加了 postgresql 插件,它自动创建了一个 DATABASE_URL
var 并附加了一个生成的值。
现在为了让所有这些都起作用,我必须在我的 github 存储库上为我的暂存分支创建一个 .env
文件,标准 .env
的复制粘贴完成了这项工作,为此,我显然必须删除附加到 APP_ENV
和 DATABASE_URL
变量的值,然后提交并推送它。 运行 现在我的应用程序索引页面终于显示在 Heroku 上的另一个构建并且错误消失了:)。
根据自己的回答做一些解释。
.env 文件是必需的,应该提交到您的存储库。但是,由于该文件已提交给存储库,因此不应包含任何敏感信息。将其视为一种确保定义所有必需环境变量的方法(即使它们具有无效值,例如 PASSWORD=XXXXXXXXXXXX。它也可以看作是创建 .env.local 或真实环境变量的模板。您也可以包括跨环境的默认不敏感值。但关键是不要在该文件中提交敏感信息。
然后您将使用 .env.local 文件(默认情况下在您的存储库中被忽略)来覆盖 .env 文件中的值。此 .env.local 文件将特定于您部署应用程序的每个环境。 .env.local 中定义的变量将胜过 .env.
中定义的变量
真正的环境变量总是胜过 .env 和 .env.local 文件中定义的变量。
对于 Heroku 部署,我会使用真正的环境变量,因为它最适合这种情况,并且不需要您在部署时使用某种挂钩来编写文件。
可在此处找到更多信息:https://symfony.com/doc/current/configuration.html#overriding-environment-values-via-env-local
在过去的一周里,我一直在尝试在 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 Symfony\Component\Dotenv\Exception\PathException: 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): Symfony\Component\Dotenv\Dotenv->doLoad()
2020-11-13T10:11:15.143350+00:00 app[web.1]: #1 /app/vendor/symfony/dotenv/Dotenv.php(114): Symfony\Component\Dotenv\Dotenv->load()
2020-11-13T10:11:15.143543+00:00 app[web.1]: #2 /app/vendor/symfony/dotenv/Dotenv.php(157): Symfony\Component\Dotenv\Dotenv->loadEnv()
2020-11-13T10:11:15.143701+00:00 app[web.1]: #3 /app/public/index.php(10): Symfony\Component\Dotenv\Dotenv->bootEnv()
2020-11-13T10:11:15.143724+00:00 app[web.1]: #4 {main}
这意味着我的应用程序无法读取我的 .env
文件,因为这是我第一次部署具有 stage 和 prod 分支的项目,我从两个存储库中删除了 .env
(需要指出的是,Heroku 已连接到我的 github 存储库)。
我的 .env
来自其他分支的文件包含数据库的开发环境变量和 app_env。所以我所做的是转到我的 heroku 应用程序仪表板,单击我的暂存应用程序,然后转到相同的地方并创建一个值为 staging
的 APP_ENV
变量。我添加了 postgresql 插件,它自动创建了一个 DATABASE_URL
var 并附加了一个生成的值。
现在为了让所有这些都起作用,我必须在我的 github 存储库上为我的暂存分支创建一个 .env
文件,标准 .env
的复制粘贴完成了这项工作,为此,我显然必须删除附加到 APP_ENV
和 DATABASE_URL
变量的值,然后提交并推送它。 运行 现在我的应用程序索引页面终于显示在 Heroku 上的另一个构建并且错误消失了:)。
根据自己的回答做一些解释。
.env 文件是必需的,应该提交到您的存储库。但是,由于该文件已提交给存储库,因此不应包含任何敏感信息。将其视为一种确保定义所有必需环境变量的方法(即使它们具有无效值,例如 PASSWORD=XXXXXXXXXXXX。它也可以看作是创建 .env.local 或真实环境变量的模板。您也可以包括跨环境的默认不敏感值。但关键是不要在该文件中提交敏感信息。
然后您将使用 .env.local 文件(默认情况下在您的存储库中被忽略)来覆盖 .env 文件中的值。此 .env.local 文件将特定于您部署应用程序的每个环境。 .env.local 中定义的变量将胜过 .env.
中定义的变量真正的环境变量总是胜过 .env 和 .env.local 文件中定义的变量。
对于 Heroku 部署,我会使用真正的环境变量,因为它最适合这种情况,并且不需要您在部署时使用某种挂钩来编写文件。
可在此处找到更多信息:https://symfony.com/doc/current/configuration.html#overriding-environment-values-via-env-local