2014-12-13 1 views
1

В моем проекте используется 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' 

Что я делаю неправильно?

+1

Вы не могли бы поместить эту строку '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' –

+0

Извините, я не заметил из трассы, что сельдерей, похоже, не уважает мой virtualenv, который активирован когда я пытаюсь запустить рабочих. – Brandon

ответ

0

Оказывается, это была проблема с установкой. Я только что сбросил свой виртуальный, переустановил сельдерей и альта. Извините, что потратил впустую все время.

1

Ваша конфигурация в порядке. Но при запуске работника вам нужно указать имя приложения или файл с объектом сельдерея. Но вы просто указываете my_project, у которого нет объекта сельдерея.

celery worker -A my_project.celery -l debug 

должен решить эту проблему.

Также переименуйте свой celery.py в celery_conf.py или что-то еще.

+0

Хорошо, теперь другая ошибка: 'ImportError: Нет модуля с именем 'django'' Почему Celery ищет в/usr/local/bin вместо Celery в моем virtualenv? – Brandon

+0

Похоже, у меня может быть проблема с установкой. Повторная установка. – Brandon