我在这里查看了这个列表,但我无法让它工作:
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) 已安装拉比3) 在设置中设置内容.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) 我运行:pythonmanage.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导入函数,那么我会得到完全相同的错误消息。
有人能向我解释一下这里是什么吗。。
Alan
尝试将tasks.py更改为:
from __future__ import absolute_import
from celery import task
可能是celery/
或celery.py
与抛出错误的模块(tasks.py
)位于同一目录中,而这作为相对导入失败了。
Yikes,你第一步从哪里得到的??我从未需要更改manage.py
或wsgi.py
文件来运行其他包。你说"下载了芹菜模块",然后你就得到了所有的sys.path
修改代码。这让我相信你没有使用pip
和virtualenv
。使用这两种工具,你的生活会轻松很多。你会简化事情,你的团队会永远爱你。当Python包管理存在时,不要过度复杂化,以使这一过程变得轻松。路径篡改很少是必要的。
你提到的那些芹菜的第一步实际上就是它所需要的。看起来你已经处理了那个特殊的mod_wsgi
音符。我的猜测是问题出在第一步——不管你对manage.py和wsgi.py做了什么修改。所有其他步骤看起来都很好。
我会复制你的代码,制作一个新的virtualenv,pip安装这些包,并删除所有的路径设置内容。使用django-admin.py startproject xxx
可以查看普通的manage.py
和wsgi.py
文件的外观。也可以使用DEBUG=True
来帮助进行故障排除。当这起作用并解决问题时,用pip需求文件替换settings.ini
。
*你用的是南方,所以记住python manage.py migrate djcelery
。(在步骤4中,您只能使用syncdb
)。我不相信这样做会修复导入错误,但从更大的角度来看,这是必要的。