1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Restore stale session check and move after dispatch development cleanups before the request

This commit is contained in:
Joshua Peek 2009-02-05 20:20:39 -06:00
parent 96d610553e
commit 7259baab47
2 changed files with 24 additions and 8 deletions

View file

@ -7,7 +7,6 @@ module ActionController
unless cache_classes
# Development mode callbacks
before_dispatch :reload_application
after_dispatch :cleanup_application
ActionView::Helpers::AssetTagHelper.cache_asset_timestamps = false
end
@ -93,11 +92,9 @@ module ActionController
run_callbacks :prepare_dispatch
Routing::Routes.reload
end
# Cleanup the application by clearing out loaded classes so they can
# be reloaded on the next request without restarting the server.
def cleanup_application
# Cleanup the application by clearing out loaded classes so they can
# be reloaded on the next request without restarting the server.
ActiveRecord::Base.reset_subclasses if defined?(ActiveRecord)
ActiveSupport::Dependencies.clear
ActiveRecord::Base.clear_reloadable_connections! if defined?(ActiveRecord)

View file

@ -58,9 +58,28 @@ module ActionController
end
def load!
@id, session = @by.send(:load_session, @env)
replace(session)
@loaded = true
stale_session_check! do
@id, session = @by.send(:load_session, @env)
replace(session)
@loaded = true
end
end
def stale_session_check!
yield
rescue ArgumentError => argument_error
if argument_error.message =~ %r{undefined class/module ([\w:]*\w)}
begin
# Note that the regexp does not allow $1 to end with a ':'
$1.constantize
rescue LoadError, NameError => const_error
raise ActionController::SessionRestoreError, "Session contains objects whose class definition isn\\'t available.\nRemember to require the classes for all objects kept in the session.\n(Original exception: \#{const_error.message} [\#{const_error.class}])\n"
end
retry
else
raise
end
end
end