2015-06-18 4 views
6

Wir haben auf Rails 4 aktualisiert, hatten einige schwerwiegende Probleme und stuften erneut herunter (das Upgrade Commit wurde rückgängig gemacht).Fehler wie "NoMethodError: undefinierte Methode` sweep 'für # <Hash ... "nach dem Downgrade auf Rails 3 von Rails 4

Wir haben dann Fehler wie

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

scheinbar, weil Rails 4 speichert ein Blitz in der Sitzung in einer Weise, die 3 nicht gelesen Rails können.

Was ist ein guter Weg, dies zu lösen?

Antwort

8

Wir haben dies gelöst, indem wir Rails selbst gepatcht haben, um diesen Fehler zu finden und den Borked Flash zu löschen. Dies bedeutet, dass es sich selbst transparent heilt.

Wir haben auch dafür gesorgt, nur diesen Patch anwenden on Rails 3, so dass es Probleme nicht verursacht, wenn wir einen weiteren Versuch Upgrade machen 4.

Rails Wir dies in config/initializers/rails4_to_rails3_downgradability.rb stecken:

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

Konfrontiert mit dem gleichen Problem, gelöst, indem Benutzer aufgefordert werden, Cookies zu löschen. Könnte keine Lösung für alle sein, nur darauf hinweisen, dass es eine Option ist.

+0

Definitiv ein guter Punkt. Danke für deinen Beitrag! –

Verwandte Themen