Class: Rails::Configuration

Inherits:
Object show all
Defined in:
lib/initializer.rb

Overview

The Configuration class holds all the parameters for the Initializer and ships with defaults that suites most Rails applications. But it’s possible to overwrite everything. Usually, you’ll create an Configuration file implicitly through the block running on the Initializer, but it’s also possible to create the Configuration instance in advance and pass it in like this:

config = Rails::Configuration.new
Rails::Initializer.run(:process, config)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Create a new Configuration instance, initialized with the default values.



859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
# File 'lib/initializer.rb', line 859

def initialize
  set_root_path!

  self.frameworks                   = default_frameworks
  self.autoload_paths               = default_autoload_paths
  self.autoload_once_paths          = default_autoload_once_paths
  self.eager_load_paths             = default_eager_load_paths
  self.log_path                     = default_log_path
  self.log_level                    = default_log_level
  self.view_path                    = default_view_path
  self.controller_paths             = default_controller_paths
  self.preload_frameworks           = default_preload_frameworks
  self.cache_classes                = default_cache_classes
  self.dependency_loading           = default_dependency_loading
  self.whiny_nils                   = default_whiny_nils
  self.plugins                      = default_plugins
  self.plugin_paths                 = default_plugin_paths
  self.plugin_locators              = default_plugin_locators
  self.plugin_loader                = default_plugin_loader
  self.database_configuration_file  = default_database_configuration_file
  self.routes_configuration_file    = default_routes_configuration_file
  self.gems                         = default_gems
  self.i18n                         = default_i18n

  for framework in default_frameworks
    self.send("#{framework}=", Rails::OrderedOptions.new)
  end
  self.active_support = Rails::OrderedOptions.new
end

Instance Attribute Details

#action_controllerObject

A stub for setting options on ActionController::Base.



655
656
657
# File 'lib/initializer.rb', line 655

def action_controller
  @action_controller
end

#action_mailerObject

A stub for setting options on ActionMailer::Base.



658
659
660
# File 'lib/initializer.rb', line 658

def action_mailer
  @action_mailer
end

#action_viewObject

A stub for setting options on ActionView::Base.



661
662
663
# File 'lib/initializer.rb', line 661

def action_view
  @action_view
end

#active_recordObject

A stub for setting options on ActiveRecord::Base.



664
665
666
# File 'lib/initializer.rb', line 664

def active_record
  @active_record
end

#active_resourceObject

A stub for setting options on ActiveResource::Base.



667
668
669
# File 'lib/initializer.rb', line 667

def active_resource
  @active_resource
end

#active_supportObject

A stub for setting options on ActiveSupport.



670
671
672
# File 'lib/initializer.rb', line 670

def active_support
  @active_support
end

#autoload_once_pathsObject

An array of paths from which Rails will automatically load from only once. All elements of this array must also be in autoload_paths.



715
716
717
# File 'lib/initializer.rb', line 715

def autoload_once_paths
  @autoload_once_paths
end

#autoload_pathsObject

An array of additional paths to prepend to the load path. By default, all app, lib, vendor and mock paths are included in this list.



699
700
701
# File 'lib/initializer.rb', line 699

def autoload_paths
  @autoload_paths
end

#cache_classesObject

Whether or not classes should be cached (set to false if you want application classes to be reloaded on each request)



677
678
679
# File 'lib/initializer.rb', line 677

def cache_classes
  @cache_classes
end

#cache_storeObject

The specific cache store to use. By default, the ActiveSupport::Cache::Store will be used.



750
751
752
# File 'lib/initializer.rb', line 750

def cache_store
  @cache_store
end

#controller_pathsObject

The list of paths that should be searched for controllers. (Defaults to app/controllers.)



681
682
683
# File 'lib/initializer.rb', line 681

def controller_paths
  @controller_paths
end

#database_configuration_fileObject

The path to the database configuration file to use. (Defaults to config/database.yml.)



685
686
687
# File 'lib/initializer.rb', line 685

def database_configuration_file
  @database_configuration_file
end

#dependency_loadingObject

Enables or disables dependency loading during the request cycle. Setting dependency_loading to true will allow new classes to be loaded during a request. Setting it to false will disable this behavior.

Those who want to run in a threaded environment should disable this option and eager load or require all there classes on initialization.

If cache_classes is disabled, dependency loaded will always be on.



814
815
816
# File 'lib/initializer.rb', line 814

def dependency_loading
  @dependency_loading
end

#eager_load_pathsObject

An array of paths from which Rails will eager load on boot if cache classes is enabled. All elements of this array must also be in autoload_paths.



732
733
734
# File 'lib/initializer.rb', line 732

def eager_load_paths
  @eager_load_paths
end

#frameworksObject

The list of rails framework components that should be loaded. (Defaults to :active_record, :action_controller, :action_view, :action_mailer, and :active_resource).



695
696
697
# File 'lib/initializer.rb', line 695

def frameworks
  @frameworks
end

#gemsObject

An array of gems that this rails application depends on. Rails will automatically load these gems during installation, and allow you to install any missing gems with:

rake gems:install

You can add gems with the #gem method.



822
823
824
# File 'lib/initializer.rb', line 822

def gems
  @gems
end

#i18nObject

Accessor for i18n settings.



855
856
857
# File 'lib/initializer.rb', line 855

def i18n
  @i18n
end

#log_levelObject

The log level to use for the default Rails logger. In production mode, this defaults to :info. In development mode, it defaults to :debug.



737
738
739
# File 'lib/initializer.rb', line 737

def log_level
  @log_level
end

#log_pathObject

The path to the log file to use. Defaults to log/##environment.log (e.g. log/development.log or log/production.log).



741
742
743
# File 'lib/initializer.rb', line 741

def log_path
  @log_path
end

#loggerObject

The specific logger to use. By default, a logger will be created and initialized using #log_path and #log_level, but a programmer may specifically set the logger to use via this accessor and it will be used directly.



747
748
749
# File 'lib/initializer.rb', line 747

def logger
  @logger
end

#metalsObject

The list of metals to load. If this is set to nil, all metals will be loaded in alphabetical order. If this is set to [], no metals will be loaded. Otherwise metals will be loaded in the order specified



770
771
772
# File 'lib/initializer.rb', line 770

def metals
  @metals
end

#plugin_loaderObject

The class that handles loading each plugin. Defaults to Rails::Plugin::Loader, but a sub class would have access to fine grained modification of the loading behavior. See the implementation of Rails::Plugin::Loader for more details.



785
786
787
# File 'lib/initializer.rb', line 785

def plugin_loader
  @plugin_loader
end

#plugin_locatorsObject

The classes that handle finding the desired plugins that you’d like to load for your application. By default it is the Rails::Plugin::FileSystemLocator which finds plugins to load in vendor/plugins. You can hook into gem location by subclassing Rails::Plugin::Locator and adding it onto the list of plugin_locators.



780
781
782
# File 'lib/initializer.rb', line 780

def plugin_locators
  @plugin_locators
end

#plugin_pathsObject

The path to the root of the plugins directory. By default, it is in vendor/plugins.



774
775
776
# File 'lib/initializer.rb', line 774

def plugin_paths
  @plugin_paths
end

#pluginsObject

The list of plugins to load. If this is set to nil, all plugins will be loaded. If this is set to [], no plugins will be loaded. Otherwise, plugins will be loaded in the order specified.



762
763
764
# File 'lib/initializer.rb', line 762

def plugins
  @plugins
end

#preload_frameworksObject

Whether to preload all frameworks at startup.



673
674
675
# File 'lib/initializer.rb', line 673

def preload_frameworks
  @preload_frameworks
end

#reload_pluginsObject

Enables or disables plugin reloading. You can get around this setting per plugin. If reload_plugins? is false, add this to your plugin’s init.rb to make it reloadable:

ActiveSupport::Dependencies.autoload_once_paths.delete lib_path

If reload_plugins? is true, add this to your plugin’s init.rb to only load it once:

ActiveSupport::Dependencies.autoload_once_paths << lib_path


798
799
800
# File 'lib/initializer.rb', line 798

def reload_plugins
  @reload_plugins
end

#root_pathObject (readonly)

The application’s base directory.



652
653
654
# File 'lib/initializer.rb', line 652

def root_path
  @root_path
end

#routes_configuration_fileObject

The path to the routes configuration file to use. (Defaults to config/routes.rb.)



689
690
691
# File 'lib/initializer.rb', line 689

def routes_configuration_file
  @routes_configuration_file
end

#time_zoneObject

Sets the default time_zone. Setting this will enable time_zone awareness for Active Record models and set the Active Record default timezone to :utc.



852
853
854
# File 'lib/initializer.rb', line 852

def time_zone
  @time_zone
end

#view_pathObject

The root of the application’s views. (Defaults to app/views.)



753
754
755
# File 'lib/initializer.rb', line 753

def view_path
  @view_path
end

#whiny_nilsObject

Set to true if you want to be warned (noisily) when you try to invoke any method of nil. Set to false for the standard Ruby behavior.



757
758
759
# File 'lib/initializer.rb', line 757

def whiny_nils
  @whiny_nils
end

Instance Method Details

#after_initialize(&after_initialize_block) ⇒ Object

Adds a block which will be executed after rails has been fully initialized. Useful for per-environment configuration which depends on the framework being fully initialized.



944
945
946
# File 'lib/initializer.rb', line 944

def after_initialize(&after_initialize_block)
  after_initialize_blocks << after_initialize_block if after_initialize_block
end

#after_initialize_blocksObject

Returns the blocks added with Configuration#after_initialize



949
950
951
# File 'lib/initializer.rb', line 949

def after_initialize_blocks
  @after_initialize_blocks ||= []
end

#breakpoint_server(_ = nil) ⇒ Object Also known as: breakpoint_server=

Deprecated options:



840
841
842
843
844
845
846
# File 'lib/initializer.rb', line 840

def breakpoint_server(_ = nil)
  $stderr.puts %(
  *******************************************************************
  * config.breakpoint_server has been deprecated and has no effect. *
  *******************************************************************
  )
end

#builtin_directoriesObject



969
970
971
972
# File 'lib/initializer.rb', line 969

def builtin_directories
  # Include builtins only in the development environment.
  (environment == 'development') ? Dir["#{RAILTIES_PATH}/builtin/*/"] : []
end

#database_configurationObject

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.



924
925
926
927
# File 'lib/initializer.rb', line 924

def database_configuration
  require 'erb'
  YAML::load(ERB.new(IO.read(database_configuration_file)).result)
end

#environmentObject

Return the currently selected environment. By default, it returns the value of the RAILS_ENV constant.



937
938
939
# File 'lib/initializer.rb', line 937

def environment
  ::RAILS_ENV
end

#environment_pathObject

The path to the current environment’s file (development.rb, etc.). By default the file is at config/environments/#{environment}.rb.



931
932
933
# File 'lib/initializer.rb', line 931

def environment_path
  "#{root_path}/config/environments/#{environment}.rb"
end

#framework_pathsObject



974
975
976
977
978
979
980
981
982
983
# File 'lib/initializer.rb', line 974

def framework_paths
  paths = %w(railties railties/lib activesupport/lib)
  paths << 'actionpack/lib' if frameworks.include?(:action_controller) || frameworks.include?(:action_view)

  [:active_record, :action_mailer, :active_resource, :action_web_service].each do |framework|
    paths << "#{framework.to_s.gsub('_', '')}/lib" if frameworks.include?(framework)
  end

  paths.map { |dir| "#{framework_root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
end

#gem(name, options = {}) ⇒ Object

Adds a single Gem dependency to the rails application. By default, it will require the library with the same name as the gem. Use :lib to specify a different name.

# gem 'aws-s3', '>= 0.4.0'
# require 'aws/s3'
config.gem 'aws-s3', :lib => 'aws/s3', :version => '>= 0.4.0', \
  :source => "http://code.whytheluckystiff.net"

To require a library be installed, but not attempt to load it, pass :lib => false

config.gem 'qrp', :version => '0.4.1', :lib => false


835
836
837
# File 'lib/initializer.rb', line 835

def gem(name, options = {})
  @gems << Rails::GemDependency.new(name, options)
end

#load_once_pathsObject

Deprecated, use autoload_once_paths.



718
719
720
721
# File 'lib/initializer.rb', line 718

def load_once_paths
  $stderr.puts("config.load_once_paths is deprecated and removed in Rails 3, please use autoload_once_paths instead")
  autoload_once_paths
end

#load_once_paths=(paths) ⇒ Object

Deprecated, use autoload_once_paths=.



724
725
726
727
# File 'lib/initializer.rb', line 724

def load_once_paths=(paths)
  $stderr.puts("config.load_once_paths= is deprecated and removed in Rails 3, please use autoload_once_paths= instead")
  self.autoload_once_paths = paths
end

#load_pathsObject

Deprecated, use autoload_paths.



702
703
704
705
# File 'lib/initializer.rb', line 702

def load_paths
  $stderr.puts("config.load_paths is deprecated and removed in Rails 3, please use autoload_paths instead")
  autoload_paths
end

#load_paths=(paths) ⇒ Object

Deprecated, use autoload_paths=.



708
709
710
711
# File 'lib/initializer.rb', line 708

def load_paths=(paths)
  $stderr.puts("config.load_paths= is deprecated and removed in Rails 3, please use autoload_paths= instead")
  self.autoload_paths = paths
end

#middlewareObject



964
965
966
967
# File 'lib/initializer.rb', line 964

def middleware
  require 'action_controller'
  ActionController::Dispatcher.middleware
end

#reload_plugins?Boolean

Returns true if plugin reloading is enabled.

Returns:

  • (Boolean)


801
802
803
# File 'lib/initializer.rb', line 801

def reload_plugins?
  !!@reload_plugins
end

#set_root_path!Object

Set the root_path to RAILS_ROOT and canonicalize it.



890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
# File 'lib/initializer.rb', line 890

def set_root_path!
  raise 'RAILS_ROOT is not set' unless defined?(::RAILS_ROOT)
  raise 'RAILS_ROOT is not a directory' unless File.directory?(::RAILS_ROOT)

  @root_path =
    # Pathname is incompatible with Windows, but Windows doesn't have
    # real symlinks so File.expand_path is safe.
    if RUBY_PLATFORM =~ /(:?mswin|mingw)/
      File.expand_path(::RAILS_ROOT)

    # Otherwise use Pathname#realpath which respects symlinks.
    else
      Pathname.new(::RAILS_ROOT).realpath.to_s
    end

  Object.const_set(:RELATIVE_RAILS_ROOT, ::RAILS_ROOT.dup) unless defined?(::RELATIVE_RAILS_ROOT)
  ::RAILS_ROOT.replace @root_path
end

#threadsafe!Object

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.



913
914
915
916
917
918
919
# File 'lib/initializer.rb', line 913

def threadsafe!
  self.preload_frameworks = true
  self.cache_classes = true
  self.dependency_loading = false
  self.action_controller.allow_concurrency = true
  self
end

#to_prepare(&callback) ⇒ Object

Add a preparation callback that will run before every request in development mode, or before the first request in production.

See Dispatcher#to_prepare.



957
958
959
960
961
962
# File 'lib/initializer.rb', line 957

def to_prepare(&callback)
  after_initialize do
    require 'dispatcher' unless defined?(::Dispatcher)
    Dispatcher.to_prepare(&callback)
  end
end