使用 heroku.yml 在 Heroku 上部署带有 Celery App 的 Flask



我真的不知道我在做什么。我正在尝试使用 heroku.yml 文件和 Docker file 在 Heroku 上部署带有 Celery 的 Flask 应用程序。

这是我的 heroku.yml 文件:

build:
docker:
web: Dockerfile
worker: Dockerfile
run:
web: gunicorn main:app
worker: celery worker --app=main.celery

这是我的 Dockerfile:

# Start with a base image
FROM python:3-onbuild
# Copy our application code
WORKDIR /Users/Owner/Lukas Projects/gift-apis
COPY requirements.txt .
# Fetch app specific dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . .
# Expose port
EXPOSE 5000
# start the app
CMD ["gunicorn", "main:app"]

在这一点上,我不确定我是否需要 Dockerfile 末尾的命令。

所以最后我正在运行git push heroku master

我收到此错误:

run.worker process type does not specify an image, such as:
remote: run:
remote:   worker:
remote:     command:
remote:       - celery worker --app=main.celery
remote:     image: <IMAGE NAME>
remote: Verifying deploy...

我不确定它在图像方面需要什么......所以我在 yml 文件的 docker 部分下添加了工人行。我真的不知道我在工人形象上做了什么。帮助!或者,如果您知道使用 Docker 映像在 Heroku 上部署带有 Celery 的 Flask 的更好方法,我全神贯注。另外,如果重要的话,我正在使用Redis。

错误消息告诉您需要为辅助角色提供基本映像。(我很惊讶它没有抱怨 Web 服务,但也许它只是先击中了工人并失败了。

应为每个运行条目指定映像:

build:
docker:
web: Dockerfile
worker: Dockerfile
run:
web: 
command:
- gunicorn main:app
image: web
worker: 
command:
- celery worker --app=main.celery
image: worker

您还可以通过创建单个基本映像来简化配置,因为它们都是相同的,并且在两个位置都使用它。

此外,您可能希望将启动命令移动到脚本中,因为它们将更容易使用,并且可以在开发过程中启动这些服务时使用它们。

关于您关于CMD条目的问题,您可以将其删除,因为看起来您在使用图像的任何地方都覆盖了它。

相关内容

  • 没有找到相关文章

最新更新