2010-09-03 2 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(). Без директивы commit() или rollback() в process_msg() a 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

Смежные вопросы