为什么在django中运行syncdb时没有创建celery_taskmeta和其他表?

时间:2011-08-05 16:40:43

标签: django celery django-celery

我正在尝试设置celery和django,但是没有创建celery_taskmeta表。

我已经按照了很多(最近的)教程,将djcelery和djkombu添加到了我的installed_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 个答案:

答案 0 :(得分:17)

这里的问题实际上是南方管理djcelery表。您需要将djcelery迁移到它的新架构。如果您从早期版本升级了djcelery并且已经安装了一组表,则需要先进行虚假迁移:

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

之前我遇到过同样的问题,但是修好了。

答案 1 :(得分:10)

我也遇到了以下错误:

DatabaseError: no such table: djkombu_queue

在进一步研究之后,我相信解决此问题的正确方法(从here拉出来)将其添加到INSTALLED_APPS

INSTALLED_APPS = ('djcelery.transport', )

添加kombu.transport.django感觉不正确。

答案 2 :(得分:5)

进入完全相同的问题,全新安装。将celery和django-celery降级到2.2.7并重新运行syncdb解决了它(无论如何都是临时的)。

答案 3 :(得分:5)

我遇到了类似的错误:

DatabaseError: no such table: djkombu_queue

就我而言,我需要将相关技术的Django应用添加到INSTALLED_APPS设置中。就我而言,它是:kombu.transport.django

之后,我重新syncdb,一切正常。在你的情况下,也许可以在芹菜鸡蛋中加入一些东西。

答案 4 :(得分:1)

我在运行manage.py dumpdata时遇到此错误。我尝试了两个不同的2.2.x版本的 celery django-celery 包与MySQL数据库。在我的情况下升级到2.2.7没有解决问题。在这个Github Issue #34上发现的建议是什么。

在Django 1.3+上使用dumpdata时,添加--exclude djcelery选项。 (当然,如果您只转储应用程序和模型的子集,则无论如何都不会得到丢失的表错误。如果您不首先使用dumpdata,则此答案不适用。)

答案 5 :(得分:0)

问题可能是SQLite3。你不能在Django中同时使用它,它会引发一个误导性的错误。切换到PostgreSQL或MySQL,尤其是芹菜开发。

或者,咬紧牙关,然后设置RabbitMQ ......

相关问题