如何使用旧的/不同的Django项目布局芹菜?

时间:2015-11-22 19:02:31

标签: python django celery

我的Django 1.6.5项目具有以下布局:

project
├── reports
│   ├── __init__.py
│   ├── models.py
│   ├── tasks.py
│   ├── tests.py
│   ├── views.py
├── __init__.py
├── manage.py
├── celery.py
├── settings.py
├── urls.py

Django和Celery建议的布局如下:

project
├── project
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── celery.py
├── reports
│   ├── __init__.py
│   ├── models.py
│   ├── tasks.py
│   ├── tests.py
│   ├── views.py
├── manage.py

我已经关注了Celery的Django项目教程(http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html)。

问题在于,当我尝试使用以下命令运行芹菜节拍(来自/ home / project)时:

celery -A project worker -B

我明白了:

ImportError: No module named project

这对我使用建议的布局的测试项目起作用,但我无法使用这个特定的布局,顺便说一下,我无法改变。

这些是我的文件:

celery.py

from __future__ import absolute_import
import os, sys
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

from django.conf import settings  # noqa

app = Celery('project')

app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

芹菜配置@ settings.py:

# Celery settings
BROKER_URL = 'amqp://guest:guest@localhost//'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

tasks.py

from __future__ import absolute_import

from celery.decorators import periodic_task
from datetime import timedelta

@periodic_task(run_every=timedelta(seconds=5))
def test_periodic_task():
    print 'Testing periodic task..'

2 个答案:

答案 0 :(得分:2)

包含project模块的文件夹不在您的系统路径中。运行celery.py时,当前工作目录/path/to/project/将添加到路径中,但您需要添加一级的目录/path/to/,以便导入{{1}模块:

project

答案 1 :(得分:2)

您可以在命令中使用--workdir之类的

celery -A project worker -B --workdir /path/to/project

注意:项目目录应具有__init__.py文件