Ответ 1
Перейдите в ту же самую проблему, свежий install. Сокращение сельдерея и django-сельдерея до 2.2.7 и повторный syncdb решили его (в промежуточный период, во всяком случае).
Я пытаюсь настроить сельдерей и django, но таблица celery_taskmeta не создается.
Я следил за многочисленными (недавними) учебниками, добавлял djcelery и djkombu к моим установленным_apps. добавлена строка "BROKER_TRANSPORT =" djkombu.transport.DatabaseTransport для моих настроек и т.д.
Я могу запустить демон просто отлично, и он будет выполнять задачи, но он выплескивает эту трассировку в конце:
==============
2011-08-05 16:21:16,231: ERROR/MainProcess] Task slate.modules.filebrowser.tasks.gen_thumb_task[0afc564b-cc54-4f4c-83f5-6db56fb23b76] raised exception: DatabaseError('no such table: celery_taskmeta',)
Traceback (most recent call last):
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/worker/job.py", line 107, in execute_safe
return self.execute(*args, **kwargs)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/worker/job.py", line 125, in execute
return super(WorkerTaskTrace, self).execute()
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/execute/trace.py", line 79, in execute
retval = self._trace()
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/execute/trace.py", line 93, in _trace
r = handler(trace.retval, trace.exc_type, trace.tb, trace.strtb)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/worker/job.py", line 140, in handle_success
self.task.backend.mark_as_done(self.task_id, retval)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/backends/base.py", line 54, in mark_as_done
return self.store_result(task_id, result, status=states.SUCCESS)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/backends/base.py", line 194, in store_result
return self._store_result(task_id, result, status, traceback, **kwargs)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/backends/database.py", line 20, in _store_result
traceback=traceback)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/managers.py", line 36, in _inner
return fun(*args, **kwargs)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/managers.py", line 154, in store_result
"traceback": traceback})
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/managers.py", line 78, in update_or_create
return self.get_query_set().update_or_create(**kwargs)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/managers.py", line 62, in update_or_create
obj, created = self.get_or_create(**kwargs)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/query.py", line 378, in get_or_create
return self.get(**lookup), False
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/query.py", line 344, in get
num = len(clone)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/query.py", line 82, in __len__
self._result_cache = list(self.iterator())
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/query.py", line 273, in iterator
for row in compiler.results_iter():
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter
for rows in self.execute_sql(MULTI):
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
cursor.execute(sql, params)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site- packages/django/db/backends/util.py", line 34, in execute
return self.cursor.execute(sql, params)
File "/Users/erichutchinson/python-env/slate/lib/python2.7/site- packages/django/db/backends/sqlite3/base.py", line 234, in execute
return Database.Cursor.execute(self, query, params)
DatabaseError: no such table: celery_taskmeta
- ============================
так как, черт возьми, я получаю эту таблицу, созданную во время syncdb?
Перейдите в ту же самую проблему, свежий install. Сокращение сельдерея и django-сельдерея до 2.2.7 и повторный syncdb решили его (в промежуточный период, во всяком случае).
Проблема в том, что Юг управляет таблицами диджеров. Вам нужно перенести djcelery на новую схему. Если вы обновили djcelery из более ранней версии и у вас уже установлен набор таблиц, сначала вам нужно выполнить фальшивую миграцию:
python manage.py migrate djcelery 0001 --fake
python manage.py migrate djcelery
У меня были те же проблемы, но это исправлено.
Я также получил следующую ошибку:
DatabaseError: no such table: djkombu_queue
Посмотрев на него немного дальше, я верю в правильный способ решить эту проблему (вытащил из здесь), чтобы добавить следующее в INSTALLED_APPS
:
INSTALLED_APPS = ('djcelery.transport', )
Добавление kombu.transport.django
неверно.
Я получал аналогичную ошибку:
DatabaseError: no such table: djkombu_queue
В моем случае мне нужно было добавить приложение Django из связанной технологии в настройку INSTALLED_APPS
. В моем случае это было: kombu.transport.django
После этого я переработал syncdb
, и все работало. В вашем случае, возможно, добавить что-то в яйцо сельдерея на путь.
Я получил эту ошибку при запуске manage.py dumpdata
. Я пробовал две разные версии 2.2.x пакетов сельдерея и django-celery с базой данных MySQL. В моем случае обновление до 2.2.7 не устранило проблему. Что было написано в этой книге Github Проблема № 34.
При использовании dumpdata в Django 1.3+ добавьте параметр --exclude djcelery
. (Конечно, если вы демпинг только подмножества приложений и моделей, вы все равно не получите недостающую табличную ошибку. И если вы не используете дампдаты в первую очередь, этот ответ не применяется.)
Проблема, вероятно, в SQLite3. Вы не можете использовать его одновременно в Django, и это вызывает ошибочную ошибку. Перейдите на PostgreSQL или MySQL, особенно для разработки celeryd.
Или, укусите пулю и установите RabbitMQ...