【发布时间】:2020-07-03 06:30:36
【问题描述】:
我想在 Heroku 上部署一个基本的 Flask 应用。
这是我的应用程序的基本结构:
├── Dockerfile
├── Makefile
├── README.rst
├── app
│ ├── __init__.py
│ └── app.py
├── heroku.yml
├── poetry.lock
├── pyproject.toml
└── tests
├── __init__.py
└── test_app.py
我希望每次将 PR 合并到项目的主分支时重新部署应用程序,因此我通过 Heroku 中的自动部署选项进行了设置。
我能够在本地以及通过 docker 容器(也在本地)成功运行此应用程序,但是 Heroku 无法部署该应用程序。我遇到的第一个错误是No default language could be detected for this app,这导致我为此应用程序(python)启用了构建包。设置构建包后,我收到以下错误:App not compatible with buildpack: https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/python.tgz ... ! push failed。我发现了一些相关的讨论(比如this 一个),这些讨论似乎表明诗歌可能是问题所在,我需要一个requirements.txt,但即使在生成一个之后,我仍然会遇到同样的错误。
有人知道这里发生了什么吗?我觉得有些事情根本上是错误的,因为我什至不需要构建包——docker 映像应该负责这一点。仅供参考,heroku.yml 包含以下内容:
build:
docker:
web: Dockerfile
如果我应该分享有关我的应用设置的更多信息,请告诉我。
非常感谢!
更新 1:
我已经设法通过heroku container:push web -a APP_NAME 后跟heroku container:release web -a APP_NAME 将我的docker 映像推送到Heroku,但是当我打开应用程序https://APP_NAME.herokuapp.com/ 时,我发现它无法启动,这并不奇怪,因为我的dockerfile 没有以RUN python app.py 结尾——如果我添加该行并重新运行上述命令,那么整个过程会在构建映像时停止,最后一行是“Running on ...”——我不认为运行它异步也是正确的解决方案。
有什么建议吗?如果我设法让 Heroku 容器正常工作,那么我想这意味着我无法让 Heroku 在每次更新 master 分支时都重建我的映像,相反,我需要自己做。
【问题讨论】:
-
你需要告诉 Heroku 如何运行你的应用程序。你的 Dockerfile 有
CMD指令吗? -
谢谢,我想我想通了,至少部分想通了,请在下面查看我的回答。我仍然想知道的是 Heroku 是否为这种部署策略提供了任何持续集成工具。我知道它可以选择检查主分支是否有推送以重新部署应用程序,但如果我正在部署自己的 docker 映像,我认为此选项不再可用。