Форум сайта python.su
После каких-то изменений, сервер(pylons) начал периодически выдавать ошибку “The transaction is inactive due to a rollback in a subtransaction and should be closed”. Чаще всего при повторном обновлении страницы все снова нормально, но иногда приходится перезапускать сервер. Вроде бы когда долго сеанс неактивный и при его активации это выпадает. Не ясно…совсем…а так все без ошибок работает.
Офлайн
Когда-то я столкнулся с поблемой при работе с MySQL. Последний после обновления, по умолчанию, стал разрывать соединение по истечении 10 минут или вроде того. Возможно у тебя та же проблема? Тогда попробуй использовать pool_recycle в create_engine.
..bw
Офлайн
Странно. И эта фигня только при апаче. Если приложение из пастера запускать, то все нормал. Удалил весь код с сервера, заменил тестовым. Вроде работает пока. До этого при обновлении я не удалял а поверх писал. Может из-за этого.
Отредактировано (Май 29, 2008 10:45:25)
Офлайн
Ога. Кажется я понял. Один из скриптом очень долго работает. Видимо в этом причина. Надо будет иначе его продумать.
Офлайн
Все. Нашел в чем проблема. Оказывается все просто. Один скрипт который выполнялся по заданию глючил из-за того что ктото ввел неверный формат времени) Смысле он обрывался на commit и вешал всё приложение…
Офлайн
Опишу подробнее, может кто-то с этим столкнется.
Скрипт получал время в виде строки “часы:минуты” и не проверяя правильность(так как брал с другого сайта и там как думалось что данные хранят они в Time, но как оказалось это просто строка О_О) заносил в базу и вот на операции Session.commit() он обрывался, влияя каким-то образом на всё приложение. Интересно как это работает…
Офлайн
Так тебе же bw ясно написал: connection (а в ней transaction) отвалилась. (По таймауту или в силу других причин - не важно. Все может зависеть от конкретного dbapi драйвера). После этого connection без переподключения использовать невозможно.
По идее ошибку в Session.commit ты должен был видеть - и иметь возможность отреагировать соответственно.
В зависимости от того, как ты в Пилонах создаешь Session - может иметь различные побочные эффекты. Правильно пойманая ошибка помогает. pool_recycle позволяет избавится от проблемы через 5-10 минут после ее происхождения.
Офлайн
NaotaКто он? Соединение? Странно, вроде соединение не должно разрываться при некорректном запросе, точнее при ошибке в запросе, в частности, как я понял, время передавалось в некорректном виде.
и вот на операции Session.commit() он обрывался
Офлайн
Грубо говоря код был такой:
try: ... Session.commit() ... except: ... Session.update(obj) Session.commit()
Офлайн