In Rails 3.0, a Rails::Application object was introduced which is nothing more than an Engine but with the responsibility of coordinating the whole boot process.

Initialization

Rails::Application is responsible for executing all railties, engines and plugin initializers. It also executes some bootstrap initializers (check Rails::Application::Bootstrap) and finishing initializers, after all the others are executed (check Rails::Application::Finisher).

Configuration

Besides providing the same configuration as Rails::Engine and Rails::Railtie, the application object has several specific configurations, for example “allow_concurrency”, “cache_classes”, “consider_all_requests_local”, “filter_parameters”, “logger”, “reload_plugins” and so forth.

Check Rails::Application::Configuration to see them all.

Routes

The application object is also responsible for holding the routes and reloading routes whenever the files change in development.

Middlewares

The Application is also responsible for building the middleware stack.

Namespace
Methods
C
D
E
I
L
N
R
T
Attributes
[RW] assets
[RW] sandbox
[RW] sandbox?
Class Public methods
inherited(base)
# File railties/lib/rails/application.rb, line 44
def inherited(base)
  raise "You cannot have more than one Rails::Application" if Rails.application
  super
  Rails.application = base.instance
  Rails.application.add_lib_to_load_path!
  ActiveSupport.run_load_hooks(:before_configuration, base.instance)
end
new()
# File railties/lib/rails/application.rb, line 58
def initialize
  super
  @initialized = false
end
Instance Public methods
config()
# File railties/lib/rails/application.rb, line 133
def config
  @config ||= Application::Configuration.new(find_root_with_flag("config.ru", Dir.pwd))
end
env_config()
# File railties/lib/rails/application.rb, line 119
def env_config
  @env_config ||= super.merge({
    "action_dispatch.parameter_filter" => config.filter_parameters,
    "action_dispatch.secret_token" => config.secret_token,
    "action_dispatch.show_exceptions" => config.action_dispatch.show_exceptions
  })
end
initialize!(group=:default)
# File railties/lib/rails/application.rb, line 94
def initialize!(group=:default)
  raise "Application has been already initialized." if @initialized
  run_initializers(group, self)
  @initialized = true
  self
end
initializers()
# File railties/lib/rails/application.rb, line 127
def initializers
  Bootstrap.initializers_for(self) +
  super +
  Finisher.initializers_for(self)
end
load_console(app=self)
# File railties/lib/rails/application.rb, line 113
def load_console(app=self)
  initialize_console
  super
  self
end
load_generators(app=self)
# File railties/lib/rails/application.rb, line 107
def load_generators(app=self)
  initialize_generators
  super
  self
end
load_tasks(app=self)
# File railties/lib/rails/application.rb, line 101
def load_tasks(app=self)
  initialize_tasks
  super
  self
end
reload_routes!()
# File railties/lib/rails/application.rb, line 86
def reload_routes!
  routes_reloader.reload!
end
routes_reloader()
# File railties/lib/rails/application.rb, line 90
def routes_reloader
  @routes_reloader ||= RoutesReloader.new
end
to_app()
# File railties/lib/rails/application.rb, line 137
def to_app
  self
end
Instance Protected methods
default_middleware_stack()
# File railties/lib/rails/application.rb, line 145
def default_middleware_stack
  ActionDispatch::MiddlewareStack.new.tap do |middleware|
    if rack_cache = config.action_controller.perform_caching && config.action_dispatch.rack_cache
      require "action_dispatch/http/rack_cache"
      middleware.use ::Rack::Cache, rack_cache
    end

    if config.force_ssl
      require "rack/ssl"
      middleware.use ::Rack::SSL
    end

    if config.serve_static_assets
      middleware.use ::ActionDispatch::Static, paths["public"].first, config.static_cache_control
    end

    middleware.use ::Rack::Lock unless config.allow_concurrency
    middleware.use ::Rack::Runtime
    middleware.use ::Rack::MethodOverride
    middleware.use ::Rails::Rack::Logger # must come after Rack::MethodOverride to properly log overridden methods
    middleware.use ::ActionDispatch::ShowExceptions, config.consider_all_requests_local
    middleware.use ::ActionDispatch::RemoteIp, config.action_dispatch.ip_spoofing_check, config.action_dispatch.trusted_proxies
    middleware.use ::Rack::Sendfile, config.action_dispatch.x_sendfile_header
    middleware.use ::ActionDispatch::Reloader unless config.cache_classes
    middleware.use ::ActionDispatch::Callbacks
    middleware.use ::ActionDispatch::Cookies

    if config.session_store
      middleware.use config.session_store, config.session_options
      middleware.use ::ActionDispatch::Flash
    end

    middleware.use ::ActionDispatch::ParamsParser
    middleware.use ::ActionDispatch::Head
    middleware.use ::Rack::ConditionalGet
    middleware.use ::Rack::ETag, "no-cache"

    if config.action_dispatch.best_standards_support
      middleware.use ::ActionDispatch::BestStandardsSupport, config.action_dispatch.best_standards_support
    end
  end
end
initialize_console()
# File railties/lib/rails/application.rb, line 202
def initialize_console
  require "pp"
  require "rails/console/app"
  require "rails/console/helpers"
end
initialize_generators()
# File railties/lib/rails/application.rb, line 198
def initialize_generators
  require "rails/generators"
end
initialize_tasks()
# File railties/lib/rails/application.rb, line 188
def initialize_tasks
  self.class.rake_tasks do
    require "rails/tasks"
    task :environment do
      $rails_rake_task = true
      require_environment!
    end
  end
end