2012-06-09 3 views
3

Хорошо, я получил все установлено правильно, чтобы получить сельдерей + Redis в Джангосельдерея с Redis бэкэндом

Я получил

INSTALLED_APPS = (
    'djcelery', 
    'kombu.transport.django', 
) 

Это в моих настройках

CELERY_REDIS_HOST = 'localhost' 
CELERY_REDIS_PORT = 8889 
CELERY_REDIS_DB = 0 
CELERY_RESULT_BACKEND = 'redis' 

BROKER_URL = "redis://localhost:8889/0" 

REDIS_CONNECT_RETRY = True 
CELERY_IGNORE_RESULT = True 
CELERY_SEND_EVENTS = True 
CELERY_TASK_RESULT_EXPIRES = 60 
CELERYBEAT_SCHEDULER= 'djcelery.schedulers.DatabaseScheduler' 

Я получил Redis работает с

./redis-server 

Он выводит на терминал каждый второй или так я также могу запустить

./manage.py celeryd -E -B --loglevel=INFO -n w1.d820 

Без ошибок я могу даже видеть мои задачи добавляются и успешно закончил с

./manage celeryev 

Так что даже думал, что он получает вход по celeryev этот код не работает:

from celery.task import task 
@task 
def add(x, y): 
    return x + y 

res = add.apply_async(args=[1,5]) 
print res.wait() 

это просто висит никогда не возвращает результат, я могу видеть его на самом деле т участвовав, чтобы получить его из Redis, потому что если я

./redis-cli 
MONITOR 

Я получаю много GetS пытается получить нон ключ существования Так что мой вывод заключается в том, что Джанго не спасает в бэкэнд Что не так с моими настройками? Я думаю, что я пропустил что-то очевидное, и я не вижу его, потому что я слишком долго борюсь с этим. Справка

Btw Я не могу использовать стандартный порт 6379, потому что я на общем сервере.

UPDATE с использованием этих

celery==2.5.3 
django-celery==2.5.5 
django-celery-with-redis==2.5 

ответ

4

В Ubuntu 10.10 при установке Redis автоматически запускается при загрузке системы, и это конфликтует с сельдереем, потому что, по-видимому, даже если сказать ему, чтобы использовать тот или иной порт, если сельдерей может подключиться к Redis в 6379 порту он будет используйте его как бэкэнд. Я не видел код, но это мой вывод. Итак, я закрыл все экземпляры redis, которые запускали мой собственный с моим redis.conf на любом порту, который я хочу, а затем я помещаю их в свои настройки.

BROKER_URL = 'redis://localhost:8889/0' 
REDIS_DB = 0 
REDIS_CONNECT_RETRY = True 
CELERY_RESULT_BACKEND = 'redis' 
CELERY_REDIS_PORT = 8889 
BROKER_PORT = 8889 
CELERY_RESULT_PORT = 8889 
CELERY_TASK_RESULT_EXPIRES = 10 
CELERYBEAT_SCHEDULER= 'djcelery.schedulers.DatabaseScheduler' 
0

Какую версию сельдерея вы используете? В версии разработки похоже, что они используют другой Decorator;

from celery.task import task 

@celery.task() 
def add(x, y): 
    return x + y 
+0

Его декоратор справа. Где вы это видите? Это даже не сработало. Для этого вам нужно будет «импортировать сельдерей». – sberry

+0

Я взял это прямо из примера версий разработки. См. Здесь: http://celery.github.com/celery/userguide/tasks.html – Michael

0

Вы начинаете сервер Redis на порту 8889?

+0

да, я в моем redis.conf я получил порт 8889 –

+0

Хмммм. Попробуйте использовать: 'add.delay (1, 5)' Вместо: 'add.apply_async (args = [1,5])' Посмотрите, работает ли это? – Kalail

6

У вас есть import djcelery; djcelery.setup_loader() в вашем settings.py?

Вы можете узнать, где он пытается подключиться, выполнив следующие действия:

$ python manage.py celeryctl shell 

>>> celery.broker_connection().as_uri() 

«setup_loader» очень важно, так что вы должны убедиться, что вы включите его.

(хорошей новостью является то, что сельдерей будет поддерживать Django из коробки для версии 2.7).

+0

У меня были эти строки в моих настройках. +1 для того, чтобы узнать, где пытается подключиться сельдерей. –

Смежные вопросы