Rails InvalidAuthenticityToken в случайное время

Вот сделка.

Наше приложение работает и используется авторами для отправки контента на веб-сайт. Проблема в том, что время от времени наши авторы получают сообщение об ошибке после отправки формы для любого ресурса на сайте. Ошибка после проверки производственных журналов была старой доброй InvalidAuthenticityToken.

Проблема в том, что они не меняют токен, они не делают форму недействительной, они ничего не делают, кроме как пишут в редакторе и нажимают «Отправить»!

Ошибка кажется совершенно случайной, иногда она возникает, иногда нет :/ Все, что я знаю, это то, что она возникает при редактировании или создании элемента, поэтому либо запросы POST, либо PUT, но проблема в том, что это не на одном конкретной области приложения, просто время от времени это происходило во всех наших формах.

Наша среда — это HAProxy, обслуживающий mongrel_cluster с 20 дворнягами, на которых запущено наше приложение. Версия рельсов 2.3.8.

Может ли это быть проблемой с сессиями в разных дворнягах? Если нет, то что я могу сделать, чтобы остановить эти случайные ошибки, из-за которых писатели иногда теряют много времени на редактирование текста и просто теряют его из-за этой проклятой ошибки.

Любая помощь действительно ценится.


person Draiken    schedule 06.08.2010    source источник
comment
Где-то читал о такой же проблеме, может это какой-то баг   -  person Bohdan    schedule 06.08.2010


Ответы (1)


Проблема оказалась действительно проще, чем я ожидал.

Таймер сеанса был установлен на 900 секунд, и иногда авторам требовалось больше времени, чем для редактирования текста на той же странице, без какой-либо другой навигации по веб-сайту.

Это сделало сеанс недействительным из-за тайм-аута, а затем, когда, наконец, форма была отправлена, сеансовая часть токена аутентификации была сброшена, поэтому возникла ошибка InvalidAuthenticityToken.

person Draiken    schedule 06.08.2010
comment
Я тоже получал это в случайное время. Как вы обновляете этот таймер сеанса? - person johnnymire; 22.08.2010
comment
Это делается в файле среды вашей среды с использованием хеша config.action_controller.session. - person Draiken; 27.08.2010