2012-08-06 1381 views
5

Ocasionalmente se producen cambios en las causas de ActionDispatch :: Session :: SessionRestoreError excepciones. Sería muy bueno para ser capaz de hacer algo como esto a las sesiones no válidas automáticamente claras:¿Se puede rescatar ActionDispatch :: Session :: SessionRestoreError?

class ApplicationController < ActionController::Base 
    rescue_from ActionDispatch::Session::SessionRestoreError do |exception| 
    reset_session 
    redirect_to :home 
    end 
end 

esto no funciona - Asumo porque la excepción está sucediendo en la capa más baja ActionDispatch. ¿Hay alguna manera de recuperarse de estos errores?

+1

Creo que las sesiones se comprueban en un middleware, aquí es donde debería mirar – apneadiving

+0

Problema extraño cuando se utiliza InheritedResources para sus Controladores, estar en un espacio de nombres y llamar a una clase de recursos dentro de otro espacio de nombres provoca este error. en lugar de 'valores predeterminados clase_de_resoldo: Plus :: Lo que sea' tuve que usar 'valores predeterminados clase_de_resoldo :: :: Plus :: Whatever' – MrYoshiji

Respuesta

7

Puede. La solución sólida está siguiendo:

  1. abierto config/initializers/secret_token.rb
  2. Cambiar el valor de YourApp::Application.config.secret_token, por ejemplo mediante la sustitución de la última char a otra cosa servidor
  3. Reinicie los rieles

Sé que no resuelve directamente el problema en cuestión y la automatización es relativamente duro y no una muy buena idea (autorewriting config aplicación) , pero podría ser una opción (costosa).

Lo experimenté con trozos grandes que se escriben en una sesión, por lo que también puede asegurarse de comprobar su sesión contra cualquier almacenamiento de datos extenso y pasarlo a la base de datos.

+2

Excelente - no he tenido este problema por bastante tiempo, pero es bueno saber que hay algo que puede hacerse, incluso si es manual. –