Estamos utilizando EngineYard Cloud para implementar nuestra aplicación Ruby on Rails. Estamos ejecutando Rails v2.3.3.Rails - Token de autenticidad no válido después de implementar
EngineYard Cloud se implementa en las instancias de AWS de manera similar a Capistrano. Después de cada implementación, nos topamos con errores Token de autenticidad no válida. Específicamente, cualquier usuario que haya visitado nuestra aplicación previamente y luego visite después de la implementación y luego intente enviar un formulario obtiene un error de token de autenticidad no válido. Este error persiste hasta que restablecen sus cookies para el sitio. Después de restablecer sus cookies, el sitio funciona como se esperaba sin errores.
Estamos utilizando el almacén de sesiones de ActiveRecord y las sesiones se guardan en la base de datos.
Este es el error que estamos viendo:
ActionController :: InvalidAuthenticityToken /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/request_forgery_protection.rb: 79: en `verify_authenticity_token'
el objeto de sesión es nula después del despliegue, sin embargo, los datos de la sesión aún persiste en la base de datos y todavía existe la cookie de ID de sesión:
Sesión:
- ID de sesión: nil datos
- : cero
No han sido capaces de explicar esto. ¿Alguna idea sobre cuál podría ser la causa raíz?
¡Gracias por cualquier sugerencia!
EDIT: Para actualizar al respecto, hemos podido aislar un ejemplo del error.
1) El usuario carga forman 2) Código se actualiza en el servidor 3) El usuario envía forma ** se produce un error no válida autenticidad de emergencia
Parece que cuando el entorno cambia, Rails es incapaz de manejar esto con el token de autenticidad
Hemos probado varios pasos para resolver:
- Restablecimiento de la sesión
- Eliminación de la cookie de sesión (tanto en JavaScript y Pasamanos)
- se limpia la tabla de la sesión en la base de datos después de implementar el código
Nada funciona. Lo único que funciona es que el usuario borre sus cookies del lado del cliente.
(Hemos estado buscando en Google (¡incluso probé Binging!) Para obtener respuestas, pero no dados.Esto parece ser un problema relacionado similar: http://railsforum.com/viewtopic.php?id=21479)
También: inicialmente pensamos que esto estaba aislado de nuestra implementación en EngineYard, pero también hemos sido capaces de reproducirlo en nuestro servidor de desarrollo que implementamos a través de Capistrano.
Cualquier pensamiento sería aceptado con gratitud.
Gracias!
No tengo tiempo para buscar la respuesta en este momento, pero querrá ir a la fuente de Rails y ver exactamente cómo se genera el token de autenticación. Es posible que el reinicio del servidor esté cambiando un valor que se usa para inicializar ese token. – Rafe