2010-04-29 14:34:41 -04:00
|
|
|
require 'active_support/deprecation'
|
2010-05-17 11:41:54 -04:00
|
|
|
require 'active_support/core_ext/string/encoding'
|
2010-01-23 16:30:17 -05:00
|
|
|
require 'rails/engine/configuration'
|
|
|
|
|
|
|
|
module Rails
|
|
|
|
class Application
|
|
|
|
class Configuration < ::Rails::Engine::Configuration
|
|
|
|
include ::Rails::Configuration::Deprecated
|
|
|
|
|
2010-03-02 16:05:25 -05:00
|
|
|
attr_accessor :allow_concurrency, :cache_classes, :cache_store,
|
2010-04-06 20:24:29 -04:00
|
|
|
:encoding, :consider_all_requests_local, :dependency_loading,
|
2010-01-23 16:30:17 -05:00
|
|
|
:filter_parameters, :log_level, :logger, :metals,
|
2010-01-27 12:56:31 -05:00
|
|
|
:plugins, :preload_frameworks, :reload_engines, :reload_plugins,
|
2010-04-06 20:24:29 -04:00
|
|
|
:secret_token, :serve_static_assets, :time_zone, :whiny_nils
|
2010-01-23 16:30:17 -05:00
|
|
|
|
|
|
|
def initialize(*)
|
|
|
|
super
|
2010-04-06 20:24:29 -04:00
|
|
|
@allow_concurrency = false
|
|
|
|
@consider_all_requests_local = false
|
|
|
|
@encoding = "utf-8"
|
|
|
|
@filter_parameters = []
|
|
|
|
@dependency_loading = true
|
2010-01-23 16:30:17 -05:00
|
|
|
@serve_static_assets = true
|
2010-03-26 13:47:55 -04:00
|
|
|
@session_store = :cookie_store
|
|
|
|
@session_options = {}
|
2010-04-06 20:24:29 -04:00
|
|
|
@time_zone = "UTC"
|
|
|
|
end
|
|
|
|
|
|
|
|
def encoding=(value)
|
|
|
|
@encoding = value
|
2010-05-17 11:41:54 -04:00
|
|
|
if "ruby".encoding_aware?
|
2010-04-06 20:24:29 -04:00
|
|
|
Encoding.default_external = value
|
2010-05-17 11:41:54 -04:00
|
|
|
Encoding.default_internal = value
|
|
|
|
else
|
|
|
|
$KCODE = value
|
|
|
|
if $KCODE == "NONE"
|
|
|
|
raise "The value you specified for config.encoding is " \
|
|
|
|
"invalid. The possible values are UTF8, SJIS, or EUC"
|
|
|
|
end
|
2010-04-06 20:24:29 -04:00
|
|
|
end
|
2010-01-23 16:30:17 -05:00
|
|
|
end
|
|
|
|
|
2010-03-08 14:39:33 -05:00
|
|
|
def middleware
|
2010-05-15 09:08:55 -04:00
|
|
|
@middleware ||= app_middleware.merge_into(default_middleware_stack)
|
2010-03-26 13:47:55 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def metal_loader
|
|
|
|
@metal_loader ||= Rails::Application::MetalLoader.new
|
2010-03-08 14:39:33 -05:00
|
|
|
end
|
|
|
|
|
2010-01-23 16:30:17 -05:00
|
|
|
def paths
|
|
|
|
@paths ||= begin
|
|
|
|
paths = super
|
|
|
|
paths.app.controllers << builtin_controller if builtin_controller
|
2010-04-29 02:39:44 -04:00
|
|
|
paths.config.database "config/database.yml"
|
|
|
|
paths.config.environment "config/environment.rb"
|
|
|
|
paths.config.environments "config/environments", :glob => "#{Rails.env}.rb"
|
|
|
|
paths.lib.templates "lib/templates"
|
|
|
|
paths.log "log/#{Rails.env}.log"
|
|
|
|
paths.tmp "tmp"
|
|
|
|
paths.tmp.cache "tmp/cache"
|
|
|
|
paths.vendor "vendor", :load_path => true
|
|
|
|
paths.vendor.plugins "vendor/plugins"
|
2010-01-23 16:30:17 -05:00
|
|
|
|
|
|
|
if File.exists?("#{root}/test/mocks/#{Rails.env}")
|
2010-04-12 12:50:55 -04:00
|
|
|
ActiveSupport::Deprecation.warn "\"Rails.root/test/mocks/#{Rails.env}\" won't be added " <<
|
2010-01-23 16:30:17 -05:00
|
|
|
"automatically to load paths anymore in future releases"
|
|
|
|
paths.mocks_path "test/mocks", :load_path => true, :glob => Rails.env
|
|
|
|
end
|
|
|
|
|
|
|
|
paths
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# Enable threaded mode. Allows concurrent requests to controller actions and
|
|
|
|
# multiple database connections. Also disables automatic dependency loading
|
|
|
|
# after boot, and disables reloading code on every request, as these are
|
|
|
|
# fundamentally incompatible with thread safety.
|
|
|
|
def threadsafe!
|
|
|
|
self.preload_frameworks = true
|
|
|
|
self.cache_classes = true
|
|
|
|
self.dependency_loading = false
|
2010-02-01 05:40:27 -05:00
|
|
|
self.allow_concurrency = true
|
2010-01-23 16:30:17 -05:00
|
|
|
self
|
|
|
|
end
|
|
|
|
|
|
|
|
# Loads and returns the contents of the #database_configuration_file. The
|
|
|
|
# contents of the file are processed via ERB before being sent through
|
|
|
|
# YAML::load.
|
|
|
|
def database_configuration
|
|
|
|
require 'erb'
|
|
|
|
YAML::load(ERB.new(IO.read(paths.config.database.to_a.first)).result)
|
|
|
|
end
|
|
|
|
|
|
|
|
def cache_store
|
|
|
|
@cache_store ||= begin
|
|
|
|
if File.exist?("#{root}/tmp/cache/")
|
|
|
|
[ :file_store, "#{root}/tmp/cache/" ]
|
|
|
|
else
|
|
|
|
:memory_store
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def builtin_controller
|
2010-03-20 13:34:21 -04:00
|
|
|
File.expand_path('../info_routes', __FILE__) if Rails.env.development?
|
2010-01-23 16:30:17 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def log_level
|
|
|
|
@log_level ||= Rails.env.production? ? :info : :debug
|
|
|
|
end
|
2010-03-02 16:05:25 -05:00
|
|
|
|
|
|
|
def colorize_logging
|
|
|
|
@colorize_logging
|
|
|
|
end
|
|
|
|
|
|
|
|
def colorize_logging=(val)
|
|
|
|
@colorize_logging = val
|
|
|
|
Rails::LogSubscriber.colorize_logging = val
|
|
|
|
self.generators.colorize_logging = val
|
|
|
|
end
|
2010-03-26 13:47:55 -04:00
|
|
|
|
|
|
|
def session_store(*args)
|
|
|
|
if args.empty?
|
|
|
|
case @session_store
|
|
|
|
when :disabled
|
|
|
|
nil
|
|
|
|
when :active_record_store
|
|
|
|
ActiveRecord::SessionStore
|
|
|
|
when Symbol
|
|
|
|
ActionDispatch::Session.const_get(@session_store.to_s.camelize)
|
|
|
|
else
|
|
|
|
@session_store
|
|
|
|
end
|
|
|
|
else
|
|
|
|
@session_store = args.shift
|
|
|
|
@session_options = args.shift || {}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def session_options
|
|
|
|
return @session_options unless @session_store == :cookie_store
|
2010-04-05 04:52:47 -04:00
|
|
|
@session_options.merge(:secret => @secret_token)
|
2010-03-26 13:47:55 -04:00
|
|
|
end
|
|
|
|
|
2010-04-22 06:00:13 -04:00
|
|
|
protected
|
|
|
|
|
2010-03-26 13:47:55 -04:00
|
|
|
def default_middleware_stack
|
|
|
|
ActionDispatch::MiddlewareStack.new.tap do |middleware|
|
2010-04-08 06:52:37 -04:00
|
|
|
middleware.use('::ActionDispatch::Static', lambda { paths.public.to_a.first }, :if => lambda { serve_static_assets })
|
2010-03-26 13:47:55 -04:00
|
|
|
middleware.use('::Rack::Lock', :if => lambda { !allow_concurrency })
|
|
|
|
middleware.use('::Rack::Runtime')
|
|
|
|
middleware.use('::Rails::Rack::Logger')
|
2010-04-02 14:00:29 -04:00
|
|
|
middleware.use('::ActionDispatch::ShowExceptions', lambda { consider_all_requests_local }, :if => lambda { action_dispatch.show_exceptions })
|
2010-04-29 07:24:24 -04:00
|
|
|
middleware.use('::ActionDispatch::RemoteIp', lambda { action_dispatch.ip_spoofing_check }, lambda { action_dispatch.trusted_proxies })
|
2010-03-26 13:47:55 -04:00
|
|
|
middleware.use('::Rack::Sendfile', lambda { action_dispatch.x_sendfile_header })
|
|
|
|
middleware.use('::ActionDispatch::Callbacks', lambda { !cache_classes })
|
|
|
|
middleware.use('::ActionDispatch::Cookies')
|
|
|
|
middleware.use(lambda { session_store }, lambda { session_options })
|
|
|
|
middleware.use('::ActionDispatch::Flash', :if => lambda { session_store })
|
2010-05-16 06:03:11 -04:00
|
|
|
middleware.use('::ActionDispatch::ParamsParser')
|
2010-03-26 13:47:55 -04:00
|
|
|
middleware.use('::Rack::MethodOverride')
|
|
|
|
middleware.use('::ActionDispatch::Head')
|
2010-05-16 06:03:11 -04:00
|
|
|
middleware.use(lambda { metal_loader.build_middleware(metals) }, :if => lambda { metal_loader.metals.any? })
|
2010-03-26 13:47:55 -04:00
|
|
|
end
|
|
|
|
end
|
2010-01-23 16:30:17 -05:00
|
|
|
end
|
|
|
|
end
|
2010-03-20 13:34:21 -04:00
|
|
|
end
|