2016-07-06 2 views
1

DJCelery не сохраняет результаты задачи в моем DjangoSQLite DB.DJCelery не записывает результаты задачи в Django SQLite DB

У меня есть существующий проект Django, который я начал настраивать с помощью Celery w/RabbitMQ. Я начал свой сервер RabbitMQ. Я могу использовать сельдерей python manage.py celeryd --verbosity=2 --loglevel=DEBUG и Celerybeat python manage.py celerybeat --verbosity=2 --loglevel=DEBUG. Все запускает ошибку w/out, и мои задачи периодического примера также выполняются без ошибок.

Я использовал pip install django-celery для установки. У меня есть djcelery в моих установленных приложениях и работает python manage.py migrate djcelery. Я добавил CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend' в конец моего файла settings.py.

Когда я бегу python manage.py celeryd --verbosity=2 --loglevel=DEBUG, текст запуска показывает:

... 
- ** ---------- .> transport: amqp://guest:**@localhost:5672// 
- ** ---------- .> results: 
- *** --- * --- .> concurrency: 1 (prefork) 
... 

В разделе Результаты быть пустым указывает мне, что конфигурация не так или иначе, но я не могу понять, каким образом. Я попытался использовать app.conf.update в файле celery.py, чтобы установить CELERY_RESULT_BACKEND, но получил те же результаты. Я упустил CELERY_RESULT_BACKEND, но это не привело к результатам. Я также попытался поставить 'database' вместо 'djcelery.backends.database:DatabaseBackend', но это указывало на то, что он пытался использовать sqlalchemy вместо djcelery.

Когда я бегу python manage.py runserver я могу видеть DJCELERY раздел с таблицами Crontabs, Intervals, Periodic tasks, Tasks и Workers. Однако никаких данных о моих Задачах нет.

Может ли кто-нибудь указать, что может быть неправильным или отсутствует? Спасибо за ваше время.

ответ

2

tutuDajuju привел меня в правильном направлении - есть больше, так что я буду писать все это. Я отказался от использования djcelery в пользу sqlalchemy с отдельной базой данных за пределами Django.

Внутри мой venv Я бежал pip install sqlalchemy. Затем я положил CELERY_RESULT_BACKEND = 'db+sqlite:///celery_results.sqlite3' в settings.py. Это связало Celery с новой базой данных SQLite для использования в состоянии/результатах.

Запуска celery -A <projectapp>.celery:app worker затем показал базы данных в сообщении запуска:

... 
- ** ---------- .> transport: amqp://guest:**@localhost:5672// 
- ** ---------- .> results: sqlite:///celery_results.sqlite3 
- *** --- * --- .> concurrency: 1 (prefork) 
... 

Сначала я волновался, потому что файл база данных не был создан в моей папке проекта Django. Это потому, что я еще не выполнял задачу. Как только я выполнил свою первую задачу, таблицы базы данных & были созданы правильно.

Я проверил результаты задачи были сохранены в базе данных, запустив скрипт:

from sqlalchemy import create_engine 

engine = create_engine("sqlite:///celery_results.sqlite3") 
connection = engine.connect() 

result = connection.execute("select * from celery_taskmeta") 

for row in result: 
    print(row) 

connection.close() 

Я нашел имена таблиц по:

print(engine.table_name()) 

Надеется, что это помогает кто-то из.

1

celery docs упомянуть несколько разных синтаксисов, не уверенный, что вы пытались действовать. Попробуйте следующее:

# use a connection string 
CELERY_RESULT_BACKEND = 'db+sqlite:///foo.db' 

Update:

Как и в свой комментарий, the docs also mention также можно использовать Django ORM/Cache в результате внутреннего интерфейса. Чтобы сделать это, вы должны передать параметр, который пытался в вашем сельдерея приложение конфигурации:

app.conf.update(
    CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend', 
) 

С другой стороны, документы также объяснить

Если вы подключили сельдерей с вашими настройками Django, то вы можете добавить это непосредственно в модуле настройки (без app.conf.update части)

Это ссылка на конфигурацию сельдерея приложения подробно в одной и той же странице. Это в основном означает, что если вы настроили приложение для сельдерея в модуле, то и вы добавите модуль настроек Django в качестве источника конфигурации для Celery, , а затем: CELERY_RESULT_BACKEND в вашем модуле настроек Django, как и вы, тоже будет работать.

file: proj/proj/сельдерей.ру

# important to pass the Django settings to your celery app 
app = Celery('proj') 
app.config_from_object('django.conf:settings') 

файл: проектируемый/проектируемый/settings.py

CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend' 
+1

Привет, документы Django [Использование Celery with Django] (http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html) указывают, что вы можете использовать 'CELERY_RESULT_BACKEND = ' djcelery.backends.database: DatabaseBackend»,'. То, что вы разместили, не использует 'djcelery', но вместо этого использует' sqlalchemy'. –

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