Развертывание Flask с приложением Celery на Heroku с помощью heroku.yml - PullRequest
0 голосов
/ 01 февраля 2020

Я действительно не знаю, что я делаю. Я пытаюсь развернуть приложение Flask с Celery на Heroku, используя файл heroku.yml и Dockerfile.

Это мой файл 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 pu sh 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...

Я не уверен, что ему нужно с точки зрения изображения ... поэтому я добавил работника строка в разделе docker файла yml. Я действительно не знаю, что я делаю на рабочем образе. Помогите! Или, если вы знаете лучший способ развертывания Flask с помощью Celery на Heroku с использованием образа Docker, я весь в ушах. Кроме того, если это имеет значение, я использую Redis.

1 Ответ

1 голос
/ 01 февраля 2020

Сообщение об ошибке говорит вам, что вам нужно предоставить базовый образ для работника. (Я удивлен, что он не жалуется на веб-службу, но, может быть, он просто сначала ударяет по работнику и терпит неудачу.)

Вы должны указать изображения для каждой записи запуска:

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

Вы также можете упростить свою конфигурацию, создав один базовый образ, так как они оба идентичны и используют его в обоих местах.

Кроме того, вы можете переместить команды запуска в сценарии, так как они будут Работать с и намного проще, вы можете использовать их во время разработки при запуске этих служб.

Что касается вашего вопроса о записи CMD, вы можете удалить ее, так как она выглядит так, как будто вы переопределяем его везде, где используется изображение.

...