1. Locations for Initialization Code
Rails offers four standard spots to place initialization code:
config/application.rb- Environment-specific configuration files
- Initializers
- After-initializers
2. Running Code Before Rails
In the rare event that your application needs to run some code before Rails itself is loaded, put it above the call to require "rails/all" in config/application.rb.
3. Configuring Rails Components
In general, the work of configuring Rails means configuring the components of Rails, as well as configuring Rails itself. The configuration file config/application.rb and environment-specific configuration files (such as config/environments/production.rb) allow you to specify the various settings that you want to pass down to all of the components.
For example, you could add this setting to config/application.rb file:
config.time_zone = "Central Time (US & Canada)"
This is a setting for Rails itself. If you want to pass settings to individual Rails components, you can do so via the same config object in config/application.rb:
config.active_record.schema_format = :ruby
Rails will use that particular setting to configure Active Record.
Use the public configuration methods over calling directly to the associated class. e.g. Rails.application.config.action_mailer.options instead of ActionMailer::Base.options.
If you need to apply configuration directly to a class, use a lazy load hook in an initializer to avoid autoloading the class before initialization has completed. This will break because autoloading during initialization cannot be safely repeated when the app reloads.
3.1. Versioned Default Values
config.load_defaults loads default configuration values for a target version and all versions prior. For example, config.load_defaults 6.1 will load defaults for all versions up to and including version 6.1.
Below are the default values associated with each target version. In cases of conflicting values, newer versions take precedence over older versions.
3.1.1. Default Values for Target Version 8.1
config.action_controller.action_on_path_relative_redirect::raiseconfig.action_controller.escape_json_responses:falseconfig.action_view.remove_hidden_field_autocomplete:trueconfig.action_view.render_tracker::rubyconfig.active_record.raise_on_missing_required_finder_order_columns:trueconfig.active_support.escape_js_separators_in_json:falseconfig.yjit:!Rails.env.local?
3.1.2. Default Values for Target Version 8.0
3.1.3. Default Values for Target Version 7.2
config.active_record.postgresql_adapter_decode_dates:trueconfig.active_record.validate_migration_timestamps:trueconfig.active_storage.web_image_content_types:%w( image/png image/jpeg image/gif image/webp )config.yjit:true
3.1.4. Default Values for Target Version 7.1
config.action_dispatch.debug_exception_log_level::errorconfig.action_dispatch.default_headers:{ "X-Frame-Options" => "SAMEORIGIN", "X-XSS-Protection" => "0", "X-Content-Type-Options" => "nosniff", "X-Permitted-Cross-Domain-Policies" => "none", "Referrer-Policy" => "strict-origin-when-cross-origin" }config.action_text.sanitizer_vendor:Rails::HTML::Sanitizer.best_supported_vendorconfig.action_view.sanitizer_vendor:Rails::HTML::Sanitizer.best_supported_vendorconfig.active_record.before_committed_on_all_records:trueconfig.active_record.belongs_to_required_validates_foreign_key:falseconfig.active_record.default_column_serializer:nilconfig.active_record.encryption.hash_digest_class:OpenSSL::Digest::SHA256config.active_record.encryption.support_sha1_for_non_deterministic_encryption:falseconfig.active_record.generate_secure_token_on::initializeconfig.active_record.marshalling_format_version:7.1config.active_record.query_log_tags_format::sqlcommenterconfig.active_record.raise_on_assign_to_attr_readonly:trueconfig.active_record.run_after_transaction_callbacks_in_order_defined:trueconfig.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction:falseconfig.active_record.sqlite3_adapter_strict_strings_by_default:trueconfig.active_support.cache_format_version:7.1config.active_support.message_serializer::json_allow_marshalconfig.active_support.raise_on_invalid_cache_expiration_time:trueconfig.active_support.use_message_serializer_for_metadata:trueconfig.add_autoload_paths_to_load_path:falseconfig.dom_testing_default_html_version:defined?(Nokogiri::HTML5) ? :html5 : :html4config.log_file_size:100 * 1024 * 1024config.precompile_filter_parameters:true
3.1.5. Default Values for Target Version 7.0
config.action_controller.action_on_open_redirect::raiseconfig.action_controller.wrap_parameters_by_default:trueconfig.action_dispatch.cookies_serializer::jsonconfig.action_dispatch.default_headers:{ "X-Frame-Options" => "SAMEORIGIN", "X-XSS-Protection" => "0", "X-Content-Type-Options" => "nosniff", "X-Download-Options" => "noopen", "X-Permitted-Cross-Domain-Policies" => "none", "Referrer-Policy" => "strict-origin-when-cross-origin" }config.action_mailer.smtp_timeout:5config.action_view.apply_stylesheet_media_default:falseconfig.action_view.button_to_generates_button_tag:trueconfig.active_record.automatic_scope_inversing:trueconfig.active_record.partial_inserts:falseconfig.active_record.verify_foreign_keys_for_fixtures:trueconfig.active_storage.multiple_file_field_include_hidden:trueconfig.active_storage.variant_processor::vipsconfig.active_storage.video_preview_arguments:"-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2"config.active_support.cache_format_version:7.0config.active_support.executor_around_test_case:trueconfig.active_support.hash_digest_class:OpenSSL::Digest::SHA256config.active_support.key_generator_hash_digest_class:OpenSSL::Digest::SHA256
3.1.6. Default Values for Target Version 6.1
ActiveSupport.utc_to_local_returns_utc_offset_times:trueconfig.action_dispatch.cookies_same_site_protection::laxconfig.action_dispatch.ssl_default_redirect_status:308config.action_mailbox.queues.incineration:nilconfig.action_mailbox.queues.routing:nilconfig.action_mailer.deliver_later_queue_name:nilconfig.action_view.form_with_generates_remote_forms:falseconfig.action_view.preload_links_header:trueconfig.active_job.retry_jitter:0.15config.active_record.has_many_inversing:true