2013-06-04 252 views
0

我用django的芹菜,而不是django芹菜模块。芹菜奇怪的数据库错误

我收到了很奇怪的数据库错误。它们每次都会发生,但各不相同。下面是一些例子:

  • ProgrammingError( '没有结果取',)
  • TransactionManagementError:事务管理模块与未决COMMIT/ROLLBACK
  • IntegrityError结束:插入或表更新 “myapp_mymodel” 违反外交关键约束“myapp_mymodel2_mymodel_id_fkey”:详细信息:表(mymodel_id)=(10082)未出现在表“myapp_mymodel”中。
  • MaybeEncodingError:发送结果错误:'“”'。原因:''PicklingError(“不能腌菜: 属性查找myapp.models.DoesNotExist失败”,)''。

代码运行良好,如果我直接调用它(没有芹菜)。

回答

0

芹菜用fork()启动工作进程。如果您在导入期间使用django数据库连接的celeryconfig.py(或您的tasks.py模块)中执行了某些操作,则必须重新加载数据库连接。

但更好的解决方案是:不要在导入时使用数据库连接(在模块或类级别)。

你可以使用这个脚本来看看是否有深跌的进口堆栈不使用数据库:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
from django.db.backends import BaseDatabaseWrapper 
def raise_exception(self): 
    raise Exception('Do not execute SQL during importing Python code!') 

BaseDatabaseWrapper.cursor=raise_exception 

import celeryconfig 
for module in celeryconfig.CELERY_IMPORTS: 
    __import__(module)