【问题标题】:Deploying Flask with Celery App on Heroku using heroku.yml使用 heroku.yml 在 Heroku 上使用 Celery App 部署 Flask
【发布时间】:2020-05-17 16:23:10
【问题描述】:

我真的不知道我在做什么。我正在尝试使用 heroku.yml 文件和 Dockerfile 在 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 部分下添加了 worker 行。我真的不知道我在对工人形象做什么。帮助!或者,如果您知道使用 Docker 映像在 Heroku 上使用 Celery 部署 Flask 的更好方法,我会全力以赴。另外,如果重要的话,我正在使用 Redis。

【问题讨论】:

    标签: docker heroku flask redis celery


    【解决方案1】:

    错误消息告诉您需要为工作人员提供基本映像。 (我很惊讶它没有抱怨 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 条目的问题,您可以删除它,因为看起来您在使用图像的任何地方都覆盖了它。

    【讨论】:

    • 如何才能拥有两个工人?
    • @EduardoGomes 我不知道。无论如何,您应该针对该问题提出一个专门的问题。
    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 2021-03-16
    • 2021-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多