Ошибки транзакций Django - PullRequest
       3

Ошибки транзакций Django

3 голосов
/ 03 сентября 2010

У меня есть cronjob, который обрабатывает электронные письма и сохраняет их в системе.Он работал хорошо в течение года, но теперь он внезапно начал периодически выдавать эти странные ошибки транзакций случайным образом.

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

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 19 марта 2011

Похоже, что ошибка произошла до ввода 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...