В моем проекте используется Python 3.4, Django 1.7.1, Celery 3.1. У меня RabbitMQ работает как и ожидалось.Модуль не имеет атрибута «сельдерей» при использовании Django 1.7.1, Python 3.4 и Celery 3.1.
Структура проекта является вне коробки стандарт:
my_project/
my_project/
settings.py
celery.py
...
Я знаю, что есть несколько повторяющихся вопросов, но они не решить вопрос для меня. Мой файл celery.py выглядит следующим образом:
from __future__ import absolute_import
import os
import django
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')
django.setup()
app = Celery('my_project')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
Настройки:
BROKER_URL = 'amqp://guest:[email protected]:5672//'
Когда я пытаюсь запустить:
$ celery -A my_project worker -l debug
Я получаю ошибку атрибута сельдерей.
Полный отслеживающий:
Traceback (most recent call last):
File "/usr/local/bin/celery", line 9, in <module>
load_entry_point('celery==3.1.17', 'console_scripts', 'celery')()
File "/usr/local/lib/python3.4/dist-packages/celery-3.1.17-py3.4.egg/celery/__main__.py", line 30, in main
main()
File "/usr/local/lib/python3.4/dist-packages/celery-3.1.17-py3.4.egg/celery/bin/celery.py", line 81, in main
cmd.execute_from_commandline(argv)
File "/usr/local/lib/python3.4/dist-packages/celery-3.1.17-py3.4.egg/celery/bin/celery.py", line 769, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/usr/local/lib/python3.4/dist-packages/celery-3.1.17-py3.4.egg/celery/bin/base.py", line 305, in execute_from_commandline
argv = self.setup_app_from_commandline(argv)
File "/usr/local/lib/python3.4/dist-packages/celery-3.1.17-py3.4.egg/celery/bin/base.py", line 465, in setup_app_from_commandline
self.app = self.find_app(app)
File "/usr/local/lib/python3.4/dist-packages/celery-3.1.17-py3.4.egg/celery/bin/base.py", line 485, in find_app
return find_app(app, symbol_by_name=self.symbol_by_name)
File "/usr/local/lib/python3.4/dist-packages/celery-3.1.17-py3.4.egg/celery/app/utils.py", line 240, in find_app
found = sym.celery
AttributeError: 'module' object has no attribute 'celery'
Что я делаю неправильно?
Вы не могли бы поместить эту строку 'import pdb; pdb.set_trace() 'внутри этого файла'/usr/local/lib/python3.4/dist-packages/celery-3.1.17-py3.4.egg/celery/app/utils.py' на строке 240 (перед 'found = sym.celery'), чтобы увидеть, какой модуль он действительно нашел? это очень похоже на то, что это может быть ошибка PATH -> превышать ваши переменные PATH или PYTHONPATH, указывая на ваш внешний каталог или на другое место в целом. Убедитесь, что 'sym .__ file__' указывает на пакет (каталог), который содержит файл' celery.py' –
Извините, я не заметил из трассы, что сельдерей, похоже, не уважает мой virtualenv, который активирован когда я пытаюсь запустить рабочих. – Brandon