【发布时间】:2018-02-12 04:39:09
【问题描述】:
我是 celery 和 docker 的新手,对此我有疑问。我有以下结构的 django 项目:
generic
generic
celery.py
...
web
tasks.py
generic/celery.py:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
import logging
logger = logging.getLogger("Celery")
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'generic.settings')
app = Celery('generic')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
web/tasks.py:
from __future__ import absolute_import, unicode_literals
from django.conf import settings
from generic.celery import app
@app.task
def foo():
...
docker-compose.yml:
version: '3.0'
services:
db:
image: postgres
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/src
ports:
- "8000:8000"
depends_on:
- db
redis:
image: redis:latest
container_name: rd01
ports:
- '6379:6379'
celery:
build: .
container_name: cl01
command: celery worker --app=app.tasks
volumes:
- ..:/src
links:
- db
- redis
当我运行我的应用程序 ModuleNotFound 时引发
ModuleNotFoundError: No module named 'app.tasks'
我也试过用 docker-compose.yml 写:
command: celery worker --app=generic.tasks
我收到了
AttributeError: module 'generic.tasks' has no attribute 'celery'
我也试过了:
command: celery worker --app=web.tasks
和:
ModuleNotFoundError: No module named 'web'
Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
ENV APP_USER user
ENV APP_ROOT /src
RUN groupadd -r ${APP_USER} \
&& useradd -r -m \
--home-dir ${APP_ROOT} \
-s /usr/sbin/nologin \
-g ${APP_USER} ${APP_USER}
WORKDIR ${APP_ROOT}
RUN apt-get update && apt-get -y install postgresql
ADD config/requirements.txt .
RUN pip install -r requirements.txt
ADD . /src/
USER ${APP_USER}
ADD . ${APP_ROOT}
我也尝试过将模块作为包含参数传递给 Celery 对象
谁能告诉我这有什么问题?我发现了很多类似的帖子,但没有答案没有帮助
【问题讨论】:
-
你能添加你的“Dockerfile”吗?您的第二次和第三次尝试看起来相同(标签除外)
-
我附加了 Dockerfile 并修复了第三次尝试 - 我的错 :)
-
你试过
command: celery worker --app=generic.celery:app吗? -
command: celery worker --app=generic.celery:app不起作用,但command: celery worker --app=celery:app向前迈了一步。我收到错误:AttributeError: module 'celery.app' has no attribute 'user_options'
标签: python django docker celery docker-compose