Использование djcelery для очистки веб-сайта и заполнения моделей django - PullRequest
0 голосов
/ 29 декабря 2010

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

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

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

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

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

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...

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

Обновление:

Я нашел django-kombu , который выглядел довольно хорошо, потому что он использует мою существующую базу данных. Я установил 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)

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

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

0 голосов
/ 12 июня 2012

У меня была такая же проблема, и проблема была в том, что у меня был неправильный путь импорта.

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

from celery import task.

Пока вы должны

from celery.task import task

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...