在有South的情况下创建djcelery表
根据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。