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.



835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
# File 'lib/initializer.rb', line 835

def initialize
  set_root_path!

  self.frameworks                   = default_frameworks
  self.load_paths                   = default_load_paths
  self.load_once_paths              = default_load_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

#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.



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

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.



790
791
792
# File 'lib/initializer.rb', line 790

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 load_paths.



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

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.



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

def gems
  @gems
end

#i18nObject

Accessor for i18n settings.



831
832
833
# File 'lib/initializer.rb', line 831

def i18n
  @i18n
end

#load_once_pathsObject

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



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

def load_once_paths
  @load_once_paths
end

#load_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 load_paths
  @load_paths
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.



713
714
715
# File 'lib/initializer.rb', line 713

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).



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

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.



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

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



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

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.



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

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.



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

def plugin_locators
  @plugin_locators
end

#plugin_pathsObject

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



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

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.



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

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.load_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.load_once_paths << lib_path


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

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.



828
829
830
# File 'lib/initializer.rb', line 828

def time_zone
  @time_zone
end

#view_pathObject

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



729
730
731
# File 'lib/initializer.rb', line 729

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.



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

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.



920
921
922
# File 'lib/initializer.rb', line 920

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



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

def after_initialize_blocks
  @after_initialize_blocks ||= []
end

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

Deprecated options:



816
817
818
819
820
821
822
# File 'lib/initializer.rb', line 816

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

#builtin_directoriesObject



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

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.



900
901
902
903
# File 'lib/initializer.rb', line 900

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.



913
914
915
# File 'lib/initializer.rb', line 913

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.



907
908
909
# File 'lib/initializer.rb', line 907

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

#framework_pathsObject



950
951
952
953
954
955
956
957
958
959
# File 'lib/initializer.rb', line 950

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


811
812
813
# File 'lib/initializer.rb', line 811

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

#middlewareObject



940
941
942
943
# File 'lib/initializer.rb', line 940

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

#reload_plugins?Boolean

Returns true if plugin reloading is enabled.

Returns:

  • (Boolean)


777
778
779
# File 'lib/initializer.rb', line 777

def reload_plugins?
  !!@reload_plugins
end

#set_root_path!Object

Set the root_path to RAILS_ROOT and canonicalize it.



866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
# File 'lib/initializer.rb', line 866

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.



889
890
891
892
893
894
895
# File 'lib/initializer.rb', line 889

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.



933
934
935
936
937
938
# File 'lib/initializer.rb', line 933

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