2015-06-18 11 views
6

Abbiamo eseguito l'upgrade a Rails 4, abbiamo riscontrato alcuni problemi importanti e di nuovo eseguito il downgrade (ripristinato il commit di aggiornamento).Errori come "NoMethodError: metodo non definito` sweep 'per # <Hash ... "dopo il downgrade a Rails 3 da Rails 4

Abbiamo poi preso errori come

NoMethodError (undefined method `sweep' for #<Hash:0x007f01ab44a940>): 

apparentemente perché Rails 4 negozi un fuoco di sessione in un modo che Rails 3 non può leggere.

Qual è un buon modo per risolvere questo?

risposta

8

Abbiamo risolto questo problema rattoppando Rails stesso per rilevare questo errore ed eliminare il flash borked. Ciò significa che si auto-guarisce in modo abbastanza trasparente.

Abbiamo anche fatto in modo di applicare solo questa patch on Rails 3, in modo da non causare problemi quando facciamo un altro tentativo di aggiornamento a Rails 4.

Abbiamo bloccato questo config/initializers/rails4_to_rails3_downgradability.rb:

if Rails::VERSION::MAJOR == 3 

    module ActionDispatch 
    class Flash 
     def call(env) 
     if (session = env['rack.session']) && (flash = session['flash']) 

      # Beginning of change! 

      if flash.respond_to?(:sweep) 
      flash.sweep 
      else 
      session.delete("flash") 
      end 

      # End of change! 

     end 

     @app.call(env) 
     ensure 
     session = env['rack.session'] || {} 
     flash_hash = env[KEY] 

     if flash_hash 
      if !flash_hash.empty? || session.key?('flash') 
      session["flash"] = flash_hash 
      new_hash = flash_hash.dup 
      else 
      new_hash = flash_hash 
      end 

      env[KEY] = new_hash 
     end 

     if session.key?('flash') && session['flash'].empty? 
      session.delete('flash') 
     end 
     end 
    end 
    end 

end 
3

Di fronte allo stesso problema, risolto dicendo agli utenti di cancellare i cookie. Potrebbe non essere una soluzione per tutti, solo sottolineando che è un'opzione.

+0

Definitivamente un buon punto. Grazie per aver contribuito! –

Problemi correlati