diff --git a/guides/source/configuring.md b/guides/source/configuring.md index b581609cb0bfc..72b90e1029f9e 100644 --- a/guides/source/configuring.md +++ b/guides/source/configuring.md @@ -65,6 +65,7 @@ Below are the default values associated with each target version. In cases of co - [`config.active_record.postgresql_adapter_decode_dates`](#config-active-record-postgresql-adapter-decode-dates): `true` - [`config.active_record.validate_migration_timestamps`](#config-active-record-validate-migration-timestamps): `true` - [`config.active_storage.web_image_content_types`](#config-active-storage-web-image-content-types): `%w[image/png image/jpeg image/gif image/webp]` +- [`config.yjit`](#config-yjit): `true` #### Default Values for Target Version 7.1 @@ -613,6 +614,16 @@ Used to easily add nested custom configuration to the application config object See [Custom Configuration](#custom-configuration) +#### `config.yjit` + +Enables YJIT as of Ruby 3.3, to bring sizeable performance improvements. If you are +deploying to a memory constrained environment you may want to set this to `false`. + +| Starting with version | The default value is | +| --------------------- | -------------------- | +| (original) | `false` | +| 7.2 | `true` | + ### Configuring Assets #### `config.assets.css_compressor` diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb index c400d23c61717..942a06ee22320 100644 --- a/railties/lib/rails/application/configuration.rb +++ b/railties/lib/rails/application/configuration.rb @@ -23,7 +23,7 @@ class Configuration < ::Rails::Engine::Configuration :content_security_policy_nonce_generator, :content_security_policy_nonce_directives, :require_master_key, :credentials, :disable_sandbox, :sandbox_by_default, :add_autoload_paths_to_load_path, :rake_eager_load, :server_timing, :log_file_size, - :dom_testing_default_html_version + :dom_testing_default_html_version, :yjit attr_reader :encoding, :api_only, :loaded_config_version, :log_level @@ -81,6 +81,7 @@ def initialize(*) @rake_eager_load = false @server_timing = false @dom_testing_default_html_version = :html4 + @yjit = false end # Loads default configuration values for a target version. This includes @@ -318,6 +319,8 @@ def load_defaults(target_version) when "7.2" load_defaults "7.1" + self.yjit = true + if respond_to?(:active_job) active_job.enqueue_after_transaction_commit = :default end diff --git a/railties/lib/rails/application/finisher.rb b/railties/lib/rails/application/finisher.rb index f144b45009855..61a7be9291b91 100644 --- a/railties/lib/rails/application/finisher.rb +++ b/railties/lib/rails/application/finisher.rb @@ -231,6 +231,12 @@ def self.complete(_state) ActiveSupport::DescendantsTracker.disable_clear! end end + + initializer :enable_yjit do + if config.yjit && defined?(RubyVM::YJIT.enable) + RubyVM::YJIT.enable + end + end end end end diff --git a/railties/lib/rails/generators/rails/app/templates/config/initializers/enable_yjit.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/initializers/enable_yjit.rb.tt deleted file mode 100644 index 7b1d025460d92..0000000000000 --- a/railties/lib/rails/generators/rails/app/templates/config/initializers/enable_yjit.rb.tt +++ /dev/null @@ -1,11 +0,0 @@ -# Automatically enable YJIT as of Ruby 3.3, as it brings very -# sizeable performance improvements. - -# If you are deploying to a memory constrained environment -# you may want to delete this file, but otherwise it's free -# performance. -if defined?(RubyVM::YJIT.enable) - Rails.application.config.after_initialize do - RubyVM::YJIT.enable - end -end diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index 2534f5de057cb..4970987507e94 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -55,7 +55,6 @@ config/environments/test.rb config/initializers/assets.rb config/initializers/content_security_policy.rb - config/initializers/enable_yjit.rb config/initializers/filter_parameter_logging.rb config/initializers/inflections.rb config/initializers/permissions_policy.rb diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index 40e14e9bb5858..070d0547506a5 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -54,7 +54,6 @@ test/dummy/config/environments/production.rb test/dummy/config/environments/test.rb test/dummy/config/initializers/content_security_policy.rb - test/dummy/config/initializers/enable_yjit.rb test/dummy/config/initializers/filter_parameter_logging.rb test/dummy/config/initializers/inflections.rb test/dummy/config/initializers/permissions_policy.rb