Почему celery_taskmeta и другие таблицы не создаются при запуске syncdb в django? - PullRequest
10 голосов
/ 05 августа 2011

Я пытаюсь настроить celery и 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?

Ответы [ 6 ]

17 голосов
/ 29 марта 2012

Проблема здесь в том, что Юг управляет таблицами djcelery. Вам нужно перенести djcelery на новую схему. Если вы обновили djcelery с более ранней версии, и у вас уже установлен набор таблиц, вам сначала нужно выполнить поддельную миграцию:

python manage.py migrate djcelery 0001 --fake
python manage.py migrate djcelery

У меня раньше были такие же проблемы, но это исправило.

10 голосов
/ 28 августа 2012

Я также получаю следующую ошибку:

DatabaseError: no such table: djkombu_queue

После более подробного изучения я считаю, что правильный способ решения этой проблемы (вытащенный из здесь ) это добавитьследующее к INSTALLED_APPS:

INSTALLED_APPS = ('djcelery.transport', )

Добавление kombu.transport.django показалось неверным.

5 голосов
/ 10 февраля 2012

Я получаю похожую ошибку:

DatabaseError: no such table: djkombu_queue

В моем случае мне нужно было добавить приложение Django из связанной технологии в настройку INSTALLED_APPS. В моем случае это было: kombu.transport.django

После этого я снова набрал syncdb и все заработало. В вашем случае, возможно, добавьте что-нибудь в яйце сельдерея к дорожке.

5 голосов
/ 08 августа 2011

столкнулся с точно такой же проблемой, свежая установка. Понижение версии сельдерея и джанго-сельдерея до версии 2.2.7 и повторный запуск syncdb решили эту проблему (во всяком случае, пока).

1 голос
/ 01 февраля 2012

Я получил эту ошибку при запуске manage.py dumpdata. Я пробовал две разные версии 2.2.x пакетов celery и django-celery с базой данных MySQL. В моем случае обновление до 2.2.7 не решило проблему. Что сработало, так это советы, найденные на этом Github Issue # 34 .

При использовании dumpdata в Django 1.3+ добавьте параметр --exclude djcelery. (Конечно, если вы выгружаете только подмножество приложений и моделей, вы все равно не получите ошибку отсутствующей таблицы. И если вы не используете dumpdata в первую очередь, этот ответ не применяется.)

0 голосов
/ 06 августа 2011

Проблема, вероятно, в SQLite3.Вы не можете использовать его одновременно в Django, и это приводит к вводящей в заблуждение ошибке.Переключитесь на PostgreSQL или MySQL, особенно для разработки celeryd.

Или, прикусите пулю и настройте RabbitMQ ...

...