【问题标题】:Why are celery_taskmeta and other tables not being created when running a syncdb in django?为什么在 django 中运行 syncdb 时没有创建 celery_taskmeta 和其他表?
【发布时间】:2011-10-21 01:01:28
【问题描述】:

我正在尝试设置 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 期间创建这个表的呢?

【问题讨论】:

  • 您是否将djcelery 添加到您的INSTALLED_APPS
  • 是的,djcelery.models 中的其他表同步得很好
  • 遇到了同样的问题。如果您从旧版本更新了 celery,syncdb 不会创建新表,您需要安装南并执行“python manage.py migrate”来创建新表,

标签: django celery django-celery


【解决方案1】:

我也收到以下错误:

DatabaseError: no such table: djkombu_queue

在进一步研究之后,我相信解决此问题的正确方法(来自here)将以下内容添加到INSTALLED_APPS

INSTALLED_APPS = ('djcelery.transport', )

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

【讨论】:

    【解决方案2】:

    我在运行manage.py dumpdata 时遇到此错误。我用 MySQL 数据库尝试了两个不同的 2.2.x 版本的 celerydjango-celery 包。就我而言,升级到 2.2.7 并没有解决问题。起作用的是在这个 Github Issue #34 上找到的建议。

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

    【讨论】:

      【解决方案3】:

      我遇到了类似的错误:

      DatabaseError: no such table: djkombu_queue
      

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

      之后,我重新运行syncdb,一切正常。在你的情况下,也许在芹菜蛋中添加一些东西到路径中。

      【讨论】:

      • 我遇到了和你一样的问题,用同样的方法解决了——非常感谢!
      【解决方案4】:

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

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

      我之前也遇到过同样的问题,但是这次解决了。

      【讨论】:

      • 这对我有用,差不多,我需要在 djcelery.transport 的迁移中伪造 0001
      • 我也不得不伪造 0002。之后再次运行。
      • 完美,谢谢!不过,我不需要假迁移。只需运行第二个命令,它就创建了丢失的表。
      【解决方案5】:

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

      【讨论】:

      • 我也可以保证这个“解决方案”。在这里,我认为我在过去的 4 小时内做错了什么......
      • 这确实有效,此外还要注意 CELERY_RESULT_BACKEND = ' 错误
      • 也为我工作。由于 migrate 仍然想这样做,我最终设置了南以忽略 djcelery。确保你的 south_migrationhistory 表中也没有 djcelery 条目,否则会导致一些问题。
      【解决方案6】:

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

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

      【讨论】:

      • 我用的是postgres,遇到了同样的问题。
      猜你喜欢
      • 2021-08-24
      • 1970-01-01
      • 2015-01-13
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多