2010-09-03 115 views
3

我有一個cronjob處理電子郵件並將它們存儲在系統中。它已經運行了一年多了,但現在突然之間它開始隨時隨地給出這些奇怪的交易錯誤。Django交易錯誤

2010-09-02-01:45:11 ERROR Exception occured during mail processing 
Traceback (most recent call last): 
File "/var/www/example.com/project/scripts/cronjobs.py", line 453, in process_msg 
    source, email, 'i' if rejection_reason else 'v', rejection_reason) 
File "/usr/lib/python2.5/site-packages/django/db/transaction.py", line 267, in _commit_manually 
    leave_transaction_management() 
File "/usr/lib/python2.5/site-packages/django/db/transaction.py", line 77, in leave_transaction_management 
    raise TransactionManagementError("Transaction managed block ended with pending COMMIT/ROLLBACK") 
TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK 

它發生沒有任何理由,沒有任何其他情景信息可用於我。這裏是我的process_msg函數的結構:

@commit_manually 
def save_email(u,l, d, t, s, e, status, reason): 
    try: 
     # ... bla bla bla ... 
     commit() 
    exception, e: 
     rollback() 
     raise e 

def process_msg(m): 
    try: 
     #.... 
     save_email(u, l, d, t 
      source, email, 'i' if rejection_reason else 'v', rejection_reason) 
     #.... 
    except Exception, e: 
     logger.error('Error while processing email', exc_info=True) 
     return None 
    else: 
     return True 

我該如何探究這個問題?

回答

0

看起來好像錯誤是在輸入save_email()之前發生的。在process_msg()中沒有commit()rollback()指令會引發TransactionError。

你可以試着用調試器以畫圈的錯誤:

def process_msg(m): 
    try: 
     import pdb     # import python debugger 
     pdb.set_trace()    # begin debugging 
     #.... 
     save_email(u, l, d, t, 
     […] 

您可以找到如何使用調試器的Python website信息。

+0

使用調試器不是一個選項。它是一個觸發它的cronjob,錯誤隨機出現 – sharjeel 2011-03-21 11:55:53