2010-12-29 2 views
0

У меня возникли проблемы с получением сельдерея, работающего с django. Я хочу использовать сельдерей, чтобы очистить сайт и обновить некоторые модели django каждые 20 минут.Использование djcelery для очистки сайта и заполнения моделей django

Я создал файл задачи в моем каталоге приложения, который имеет класс обновления:

class Update(PeriodicTask): 
    run_every=datetime.timedelta(minutes=20) 

    def run(self, **kwargs): 
     #update models 

Класс правильно обновляет мой modesl, если я запустить его из командной строки:

if __name__ == '__main__': 
    Update().run() 

Мой сельдерея конфигурации в setting.py выглядит следующим образом:

CELERY_RESULT_BACKEND = "database" 
BROKER_HOST = 'localhost' 
BROKER_PORT = 5672 
BROKER_USER = 'Broker' 
BROKER_PASSWORD = '*password*' 
BROKER_VHOST = 'broker_vhost' 

Но когда я бегу manage.py celeryd -v 2 Я получаю ошибки в подключении:

[2010-12-29 09:28:15,150: ERROR/MainProcess] CarrotListener: Connection Error: [Errno 111] Connection refused. Trying again in 10 seconds... 

Что мне не хватает?

Update:

Я нашел django-kombu, который выглядел довольно хорошо becuase он использует свою существующую базу данных. Я установил django-kombu и kombu, но теперь я получаю следующую ошибку при запуске manage.py celeryd -v 2.

Traceback (most recent call last): 
    File "manage.py", line 11, in <module> 
    execute_manager(settings) 
    File "<webapp_path>/lib/python2.6/django/core/management/__init__.py", line 438, in execute_manager 
    utility.execute() 
    File "<webapp_path>/lib/python2.6/django/core/management/__init__.py", line 379, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "<webapp_path>/lib/python2.6/django/core/management/base.py", line 191, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "<webapp_path>/lib/python2.6/django/core/management/base.py", line 220, in execute 
    output = self.handle(*args, **options) 
    File "<webapp_path>/lib/python2.6/django_celery-2.1.4-py2.6.egg/djcelery/management/commands/celeryd.py", line 20, in handle 
    worker.run(*args, **options) 
    File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/bin/celeryd.py", line 83, in run 
    from celery.apps.worker import Worker 
    File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/apps/worker.py", line 15, in <module> 
    from celery.task import discard_all 
    File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/task/__init__.py", line 7, in <module> 
    from celery.execute import apply_async 
    File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/execute/__init__.py", line 7, in <module> 
    from celery.result import AsyncResult, EagerResult 
    File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/result.py", line 9, in <module> 
    from celery.backends import default_backend 
    File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/backends/__init__.py", line 51, in <module> 
    default_backend = DefaultBackend() 
TypeError: __init__() takes exactly 2 arguments (1 given) 
+1

это говорит сельдерей-2.1.4-py2.6.egg в вашей пасты, но использовать комбу вам нужна версия развития сельдерея (стать 2.2). Установить с git: http://github.com/ask/celery (или установить pip -U http://github.com/ask/django-celery/tarball/master#egg=django-celery; установить pip -U http : //github.com/ask/celery/tarball/master#egg=celery; в этом порядке). – asksol

ответ

1

Не похоже, у вас есть брокера установленном/запущенном (RabbitMQ?)

+0

Я пытался заставить сельдерей работать с как можно меньшим :) У меня теперь все работает с геттоком. Спасибо, что нажали меня в правильном каталоге. – keegan3d

+0

У меня такая же ошибка, также работает GhettoQ. Действительно ли это гетто? – Rich

0

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

Возможно, вы импортировать задачу

from celery import task.

В то время как вы должны

from celery.task import task