module Rails
Railties – Gluing the Engine to the Rails¶ ↑
Railties is responsible for gluing all frameworks together. Overall, it:
-
handles the bootstrapping process for a Rails application;
-
manages the
railscommand line interface; -
and provides the Rails generators core.
Download¶ ↑
The latest version of Railties can be installed with RubyGems:
-
gem install railties
Source code can be downloaded as part of the Rails project on GitHub
License¶ ↑
Railties is released under the MIT license:
Support¶ ↑
API documentation is at
Bug reports can be filed for the Ruby on Rails project here:
Feature requests should be discussed on the rubyonrails-core forum here:
Attributes
Public Class Methods
# File railties/lib/rails.rb, line 44 def application @application ||= (app_class.instance if app_class) end
Provides access to the application autoloaders.
The autoloader that manages ‘autoload_paths` is reachable as
Rails.autoloaders.main
This autoloader manages the constants that are reloaded when reloading is enabled.
The autoloader that manages ‘autoload_once_paths` is reachable as
Rails.autoloaders.once
This autoloader manages constants that are autoloaded, but not reloaded.
You can use these objects to customize their behavior, defining custom root namespaces, collapsing directories, configuring callbacks, etc.
# config/environments/development.rb Rails.autoloaders.main.on_load("MyGateway") do MyGateway.endpoint = "https://my-gateway.localhost" end # config/environments/production.rb Rails.autoloaders.main.on_load("MyGateway") do MyGateway.endpoint = "https://my-gateway.example.com" end
The each iterator allows you to iterate over both loaders:
Rails.autoloaders.each do |loader| loader.log! end
which may be handy if you want to run the same code for both of them.
Indeed, there is a shortcut for that common use case:
Rails.autoloaders.log!
which is handy to watch the activity of the autoloaders.
Finally, zeitwerk_enabled? allows you to check if autoloading is powered by Zeitwerk. This predicate returns a hard-coded true since Rails 7, but it is still in place for engines that support Rails 6.
The autoloaders are available really early, you can access them in the application class body, environment configuration, initializers, etc.
Please check the Autoloading and Reloading Constants guide and the documentation of Zeitwerk itself for more details and usage patterns.
# File railties/lib/rails.rb, line 186 def autoloaders application.autoloaders end
# File railties/lib/rails.rb, line 55 def backtrace_cleaner @backtrace_cleaner ||= Rails::BacktraceCleaner.new end
The Configuration instance used to configure the Rails environment
# File railties/lib/rails.rb, line 51 def configuration application.config end
Returns the current Rails environment.
Rails.env # => "development" Rails.env.development? # => true Rails.env.production? # => false Rails.env.local? # => true true for "development" and "test", false for anything else
# File railties/lib/rails.rb, line 74 def env @_env ||= ActiveSupport::EnvironmentInquirer.new(ENV["RAILS_ENV"].presence || ENV["RACK_ENV"].presence || "development") end
Sets the Rails environment.
Rails.env = "staging" # => "staging"
# File railties/lib/rails.rb, line 81 def env=(environment) @_env = ActiveSupport::EnvironmentInquirer.new(environment) end
Returns the ActiveSupport::ErrorReporter of the current Rails project, otherwise it returns nil if there is no project.
Rails.error.handle(IOError) do # ... end Rails.error.report(error)
# File railties/lib/rails.rb, line 92 def error ActiveSupport.error_reporter end
Returns the ActiveSupport::EventReporter of the current Rails project, otherwise it returns nil if there is no project.
Rails.event.notify("my_event", { message: "Hello, world!" })
# File railties/lib/rails.rb, line 100 def event ActiveSupport.event_reporter end
Returns the currently loaded version of Rails as a Gem::Version.
# File railties/lib/rails/gem_version.rb, line 5 def self.gem_version Gem::Version.new VERSION::STRING end
Returns all Rails groups for loading based on:
-
The Rails environment;
-
The environment variable RAILS_GROUPS;
-
The optional envs given as argument and the hash with group dependencies;
Rails.groups assets: [:development, :test] # => [:default, "development", :assets] for Rails.env == "development" # => [:default, "production"] for Rails.env == "production"
# File railties/lib/rails.rb, line 113 def groups(*groups) hash = groups.extract_options! env = Rails.env groups.unshift(:default, env) groups.concat ENV["RAILS_GROUPS"].to_s.split(",") groups.concat hash.map { |k, v| k if v.map(&:to_s).include?(env) } groups.compact! groups.uniq! groups end
Returns a Pathname object of the public folder of the current Rails project, otherwise it returns nil if there is no project:
Rails.public_path # => #<Pathname:/Users/someuser/some/path/project/public>
# File railties/lib/rails.rb, line 129 def public_path application && Pathname.new(application.paths["public"].first) end
Returns a Pathname object of the current Rails project, otherwise it returns nil if there is no project:
Rails.root # => #<Pathname:/Users/someuser/some/path/project>
# File railties/lib/rails.rb, line 64 def root application && application.config.root end
Returns the currently loaded version of Rails as a string.
# File railties/lib/rails/version.rb, line 7 def self.version VERSION::STRING end