在有South的情况下创建djcelery表

3 投票
3 回答
1850 浏览
提问于 2025-04-17 08:12

根据django-celery的文档,如果我有South这个工具,我应该调用

python manage.py migrate djcelery

但是,它只是创建了一些迁移文件:

Running migrations for djcelery:
 - Migrating forwards to 0001_initial
 > djcelery:0001_initial
 - Loading initial data for djcelery.
No fixtures found.

并没有像应该那样创建以下这些表。我在把south从INSTALLED_APPS中移除后进行了syncdb:

Creating table djcelery_intervalschedule
Creating table djcelery_crontabschedule
Creating table djcelery_periodictasks
Creating table djcelery_periodictask
Creating table djcelery_workerstate
Creating table djcelery_taskstate

但是,当south在的时候,这些表并没有被创建:

python manage.py syncdb

奇怪的是,昨天我居然能通过syncdb得到这些表,但老实说,我不知道我做了什么让它成功的,也无法再现这个过程。这在Windows 7和Ubuntu 11.10上都发生过。

我在想是不是我做错了什么。任何建议都很感谢!

3 个回答

-1

只需要运行这个命令,我最近用过它,成功创建了所有的djcelery表。

python manage.py migrate
0

看起来,如果数据库表已经存在,djcelery 就不会报错,默默失败了。你可以查看这个链接了解更多:https://github.com/ask/django-celery/blob/master/djcelery/migrations/0001_initial.py

你可以尝试修改迁移文件,打印出异常信息,这可能会有帮助。

补充:你可以尝试在 0001_initial.py 文件中编辑 ignore_exists,像下面这样做。(虽然不是很干净,但可能有助于理解)

def ignore_exists(fun, *args, **kwargs):
    try:
        fun(*args, **kwargs)
    except DatabaseError, exc:
        print "##", exc #This is the patch
        if "exists" in str(exc):
            return False
        raise
    return True
3
python manage.py syncdb --all

我们也遇到了同样的问题,不过我们通过在使用 syncdb 的时候加上 --all 这个选项,成功创建了所有的表格,前提是安装了 South。

撰写回答