Skip to Content Skip to Search

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 rails command 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:

Namespace
Methods
A
B
C
E
G
P
R
V

Attributes

[RW] app_class
[W] application
[RW] cache
[RW] logger

Class Public methods

app()

Alias for: application

application()

Also aliased as: app
# File railties/lib/rails.rb, line 43
def application
  @application ||= (app_class.instance if app_class)
end

autoloaders()

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

backtrace_cleaner()

# File railties/lib/rails.rb, line 55
def backtrace_cleaner
  @backtrace_cleaner ||= Rails::BacktraceCleaner.new
end

configuration()

The Configuration instance used to configure the Rails environment

# File railties/lib/rails.rb, line 51
def configuration
  application.config
end

env()

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

env=(environment)

Sets the Rails environment.

Rails.env = "staging" # => "staging"
# File railties/lib/rails.rb, line 81
def env=(environment)
  @_env = ActiveSupport::EnvironmentInquirer.new(environment)
end

error()

Returns the ActiveSupport::ErrorReporter instance used for reporting errors.

Rails.error.handle(IOError) do
  # ...
end
Rails.error.report(error)
# File railties/lib/rails.rb, line 92
def error
  ActiveSupport.error_reporter
end

event()

Returns the ActiveSupport::EventReporter instance used for broadcasting structured events.

Rails.event.notify("my_event", { message: "Hello, world!" })
# File railties/lib/rails.rb, line 100
def event
  ActiveSupport.event_reporter
end

gem_version()

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

groups(*groups)

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

public_path()

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

root()

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

version()

Returns the currently loaded version of Rails as a string.

# File railties/lib/rails/version.rb, line 7
def self.version
  VERSION::STRING
end