2013-06-04 251 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)