Fix "NoMethodError: undefined method `sweep'" error when downgrading from Rails 4 to Rails 3.
# Without this fix, downgrading from Rails 4 to Rails 3 causes session cookies to blow up. | |
# | |
# The way the flash is stored in the session changed in a backwards-incompatible way. | |
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 |
This comment has been minimized.
This comment has been minimized.
Thanks for sharing this! This eases my concerns in possibly having to roll back from Rails 4 to Rails 3. |
This comment has been minimized.
This comment has been minimized.
Thank you for sharing! |
This comment has been minimized.
This comment has been minimized.
My application is on rails 3.2 from start and I am getting the same error but I have never done any upgrading from rails 3 to rails 4. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
@victorarias came up with the idea for this fix.
Verified to work in dev; not yet in prod.