Мы используем EngineYard Cloud для развертывания нашего приложения Ruby on Rails. Мы запускаем Rails v2.3.3.
EngineYard Cloud развертывается в экземплярах AWS аналогично Capistrano. После каждого развертывания мы сталкиваемся с ошибками Notual Authenticity Token. В частности, любой пользователь, который ранее посещал наше приложение, а затем посещает его после развертывания, а затем пытается отправить форму, получает недопустимую ошибку токена аутентификации. Эта ошибка сохраняется до тех пор, пока они не будут reset содержать файлы cookie для сайта. После reset их файлов cookie сайт работает как ожидалось без ошибок.
Мы используем хранилище сеансов ActiveRecord, и сеансы сохраняются в базе данных.
Это ошибка, которую мы видим:
ActionController:: InvalidAuthenticityToken /usr/lib/ruby/gems/ 1.8/gems/actionpack-2.3.3/lib/action_controller/request_forgery_protection.rb:79:in `verify_authenticity_token '
Объект сеанса равен нулю после развертывания, однако данные сеанса все еще сохраняются в базе данных, и файл cookie идентификатора сеанса все еще существует:
Сеанс:
- session id: nil
- данные: nil
Мы не смогли объяснить это. Любые мысли о том, что может быть основной причиной?
Спасибо за любые предложения!
EDIT: просто для обновления на этом мы смогли выделить пример ошибки.
1) Пользователь загружает форму 2) Код обновляется на сервере 3) Пользователь отправляет форму ** Неверная ошибка маркера подлинности.
Похоже, что когда среда изменяется, Rails не может обработать это с помощью токена аутентификации.
Мы попытались выполнить несколько шагов:
- Сброс сеанса
- Удаление файла cookie сеанса (как в JavaScript, так и в Rails)
- Очистка таблицы сеанса в базе данных после развертывания кода
Ничего не работает. Единственное, что работает, - это очистить пользователей cookie на стороне клиента.
(Мы использовали Googling (даже попробовали Binging!) для ответов, но не играли в кости. Это похоже на аналогичную проблему: http://railsforum.com/viewtopic.php?id=21479)
Также: изначально мы думали, что это было изолировано от нашего развертывания до EngineYard, но мы также смогли воспроизвести его на нашем сервере разработки, который мы развертываем через Capistrano.
Любые мысли были бы с благодарностью приняты.
Спасибо!