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