2010-09-03 141 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