Class: ActionController::Reloader

Inherits:
Object
  • Object
show all
Defined in:
lib/action_controller/reloader.rb

Defined Under Namespace

Classes: BodyWrapper

Constant Summary collapse

@@default_lock =
Mutex.new

Class Method Summary collapse

Class Method Details

.run(lock = @@default_lock) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/action_controller/reloader.rb', line 30

def self.run(lock = @@default_lock)
  lock.lock
  begin
    Dispatcher.reload_application
    status, headers, body = yield
    # We do not want to call 'cleanup_application' in an ensure block
    # because the returned Rack response body may lazily generate its data. This
    # is for example the case if one calls
    #
    #   render :text => lambda { ... code here which refers to application models ... }
    #
    # in an ActionController.
    #
    # Instead, we will want to cleanup the application code after the request is
    # completely finished. So we wrap the body in a BodyWrapper class so that
    # when the Rack handler calls #close during the end of the request, we get to
    # run our cleanup code.
    [status, headers, BodyWrapper.new(body, lock)]
  rescue Exception
    lock.unlock
    raise
  end
end