我在这里查看此列表但我无法正常工作:
http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
所以我做的是: 1)下载芹菜模块并将它们添加到我的manage.py和wsgi.py:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import os, sys
from ConfigParser import RawConfigParser
config = RawConfigParser()
abspath = os.path.abspath(os.path.dirname(__file__))
config.read(abspath+'/subfolder/settings.ini')
homedir = config.get('paths', 'libspath')
projectspath = config.get('paths', 'projectspath')
path = [
'/Django-1.4.5/',
'/South-0.7.6',
'/python-openid-master',#07.05.2013 checkout from https://github.com/openid/python-openid
'/mbi-django-rosetta-eca151e',
'/phonenumbers-5.2b1',
'/django-phonenumber-field-develop',
'/django-openid-auth-0.5',
'/celery-3.0.19',
'/django-celery-3.0.17',
'/kombu-2.5.11',
'/billiard-2.7.3.28',
'/anyjson-0.3.3',
'/amqp-1.0.12'
]
for item in path:
module = homedir+item
if module not in sys.path:
sys.path.append(module)
2)安装了rabbitmq 3)在settings.py中设置东西:
INSTALLED_APPS = (
---
'djcelery',
)
最后:
BROKER_URL = 'amqp://guest:guest@localhost:5672/'
import djcelery
djcelery.setup_loader()
4)运行python manage.py syncdb
5)因为即时通讯使用mod_wsgi我也将它添加到我的wsgi.py(除了我之前展示的代码)
import djcelery
djcelery.setup_loader()
6)我在我的核心应用中创建了tasks.py:
import logging, subprocess
logger = logging.getLogger('debugger')
from django.conf import settings
from celery import task
@task
def runfunc(funcname, refno):
x = 'nothing to see here'
7)我运行:python manage.py芹菜工人--loglevel = info 得到一大堆东西意味着一切都好:P。
但是当我去django视图时应该运行我得到的任务:
cannot import name task
Request Method: GET
Request URL: http://localhost/url/that/triggers/task/
Django Version: 1.4.5
Exception Type: ImportError
Exception Value:
cannot import name task
Exception Location: /path/to/project/core/tasks.py in <module>, line 6
当我去manage.py shell并输入 从芹菜进口任务 - 它工作得很好。 如果我从core.tasks导入函数,那么我得到完全相同的错误消息。
任何人都可以向我解释一下这里......
艾伦
答案 0 :(得分:5)
尝试将tasks.py更改为:
from __future__ import absolute_import
from celery import task
您可能在与导致错误的模块(celery/
)相同的目录中有celery.py
或tasks.py
,并且这是作为相对导入失败的。
答案 1 :(得分:1)
Yikes,你在第一步中从哪里得到了所有这些?我从来没有必要更改manage.py
或wsgi.py
文件来运行其他程序包。你说“下载芹菜模块”,然后你有所有sys.path
更改代码。这让我相信您没有使用pip
和virtualenv
。使用这两种工具可以大大简化您的生活。你会简化事情,你的团队会永远爱你。当存在Python包管理时,不要过度复杂化以免这种痛苦。路径修改很少是必要的。
您引用的那些Celery first steps实际上只需要它。看起来你已经处理了那个特殊的mod_wsgi
注释。我的猜测是问题出在第一步 - 无论你对manage.py和wsgi.py做了哪些修改。所有其他步骤看起来都很好*。
我会复制你的代码,创建一个新的virtualenv,pip安装这些包并删除所有路径设置的东西。使用django-admin.py startproject xxx
查看普通香草manage.py
和wsgi.py
文件的外观。还可以使用DEBUG=True
来帮助进行问题排查。如果有效并且您已解决问题,请使用点requirements file替换settings.ini
。
*您使用South,请记住python manage.py migrate djcelery
。 (在第4步中,您只使用syncdb
)。我不相信这样做会解决导入错误,但在更大的图片中这是必要的。