railties 7.2.1 → 8.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +111 -287
 - data/lib/minitest/rails_plugin.rb +1 -1
 - data/lib/rails/application/configuration.rb +15 -2
 - data/lib/rails/application/default_middleware_stack.rb +4 -0
 - data/lib/rails/application/finisher.rb +2 -2
 - data/lib/rails/application/routes_reloader.rb +11 -1
 - data/lib/rails/application.rb +5 -0
 - data/lib/rails/code_statistics.rb +128 -86
 - data/lib/rails/code_statistics_calculator.rb +78 -76
 - data/lib/rails/command/helpers/editor.rb +1 -1
 - data/lib/rails/commands/app/update_command.rb +1 -9
 - data/lib/rails/commands/credentials/USAGE +4 -4
 - data/lib/rails/commands/credentials/credentials_command.rb +5 -1
 - data/lib/rails/commands/dev/dev_command.rb +1 -1
 - data/lib/rails/commands/devcontainer/devcontainer_command.rb +1 -1
 - data/lib/rails/commands/stats/stats_command.rb +19 -0
 - data/lib/rails/dev_caching.rb +2 -2
 - data/lib/rails/engine/configuration.rb +3 -1
 - data/lib/rails/engine/lazy_route_set.rb +109 -0
 - data/lib/rails/engine.rb +10 -5
 - data/lib/rails/gem_version.rb +4 -4
 - data/lib/rails/generators/app_base.rb +46 -24
 - data/lib/rails/generators/database.rb +101 -67
 - data/lib/rails/generators/erb/authentication/authentication_generator.rb +15 -0
 - data/lib/rails/generators/erb/authentication/templates/views/passwords/edit.html.erb +9 -0
 - data/lib/rails/generators/erb/authentication/templates/views/passwords/new.html.erb +8 -0
 - data/lib/rails/generators/erb/authentication/templates/views/sessions/new.html.erb +11 -0
 - data/lib/rails/generators/generated_attribute.rb +16 -11
 - data/lib/rails/generators/rails/app/app_generator.rb +19 -32
 - data/lib/rails/generators/rails/app/templates/Dockerfile.tt +12 -3
 - data/lib/rails/generators/rails/app/templates/Gemfile.tt +23 -8
 - data/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css.tt +6 -11
 - data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +10 -3
 - data/lib/rails/generators/rails/app/templates/bin/dev.tt +1 -0
 - data/lib/rails/generators/rails/app/templates/bin/setup.tt +5 -7
 - data/lib/rails/generators/rails/app/templates/bin/thrust.tt +4 -0
 - data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +23 -0
 - data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +23 -0
 - data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +40 -0
 - data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +23 -0
 - data/lib/rails/generators/rails/app/templates/config/deploy.yml.tt +124 -0
 - data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +12 -23
 - data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +34 -51
 - data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +5 -19
 - data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +0 -7
 - data/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.tt +1 -1
 - data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_8_0.rb.tt +25 -0
 - data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +11 -2
 - data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +3 -3
 - data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +4 -3
 - data/lib/rails/generators/rails/app/templates/dockerignore.tt +1 -2
 - data/lib/rails/generators/rails/app/templates/github/ci.yml.tt +1 -1
 - data/lib/rails/generators/rails/app/templates/gitignore.tt +1 -2
 - data/lib/rails/generators/rails/app/templates/kamal-secrets.tt +17 -0
 - data/lib/rails/generators/rails/app/templates/public/400.html +114 -0
 - data/lib/rails/generators/rails/app/templates/public/404.html +113 -66
 - data/lib/rails/generators/rails/app/templates/public/406-unsupported-browser.html +113 -65
 - data/lib/rails/generators/rails/app/templates/public/422.html +113 -66
 - data/lib/rails/generators/rails/app/templates/public/500.html +113 -65
 - data/lib/rails/generators/rails/app/templates/public/icon.png +0 -0
 - data/lib/rails/generators/rails/app/templates/public/icon.svg +2 -2
 - data/lib/rails/generators/rails/authentication/USAGE +6 -0
 - data/lib/rails/generators/rails/authentication/authentication_generator.rb +54 -0
 - data/lib/rails/generators/rails/authentication/templates/controllers/concerns/authentication.rb +55 -0
 - data/lib/rails/generators/rails/authentication/templates/controllers/passwords_controller.rb +33 -0
 - data/lib/rails/generators/rails/authentication/templates/controllers/sessions_controller.rb +21 -0
 - data/lib/rails/generators/rails/authentication/templates/mailers/passwords_mailer.rb +6 -0
 - data/lib/rails/generators/rails/authentication/templates/models/current.rb +4 -0
 - data/lib/rails/generators/rails/authentication/templates/models/session.rb +3 -0
 - data/lib/rails/generators/rails/authentication/templates/models/user.rb +6 -0
 - data/lib/rails/generators/rails/authentication/templates/test/mailers/previews/passwords_mailer_preview.rb +7 -0
 - data/lib/rails/generators/rails/authentication/templates/views/passwords_mailer/reset.html.erb +4 -0
 - data/lib/rails/generators/rails/authentication/templates/views/passwords_mailer/reset.text.erb +2 -0
 - data/lib/rails/generators/rails/credentials/templates/credentials.yml.tt +4 -0
 - data/lib/rails/generators/rails/db/system/change/change_generator.rb +1 -1
 - data/lib/rails/generators/rails/devcontainer/devcontainer_generator.rb +5 -3
 - data/lib/rails/generators/rails/devcontainer/templates/devcontainer/devcontainer.json.tt +1 -1
 - data/lib/rails/generators/rails/plugin/plugin_generator.rb +11 -11
 - data/lib/rails/generators/rails/plugin/templates/github/ci.yml.tt +1 -1
 - data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +2 -2
 - data/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb.tt +2 -2
 - data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb.tt +3 -3
 - data/lib/rails/generators/rails/script/USAGE +18 -0
 - data/lib/rails/generators/rails/script/script_generator.rb +18 -0
 - data/lib/rails/generators/rails/script/templates/script.rb.tt +3 -0
 - data/lib/rails/generators.rb +7 -2
 - data/lib/rails/info_controller.rb +10 -2
 - data/lib/rails/rack/silence_request.rb +33 -0
 - data/lib/rails/rack.rb +1 -0
 - data/lib/rails/railtie.rb +13 -13
 - data/lib/rails/source_annotation_extractor.rb +31 -14
 - data/lib/rails/tasks/statistics.rake +13 -28
 - data/lib/rails/templates/rails/info/notes.html.erb +65 -0
 - metadata +45 -25
 - data/lib/rails/generators/rails/app/templates/app/assets/config/manifest.js.tt +0 -2
 - data/lib/rails/generators/rails/app/templates/app/channels/application_cable/channel.rb.tt +0 -4
 - data/lib/rails/generators/rails/app/templates/app/channels/application_cable/connection.rb.tt +0 -4
 - data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_2.rb.tt +0 -70
 - data/lib/rails/generators/rails/app/templates/config/initializers/permissions_policy.rb.tt +0 -13
 - data/lib/rails/generators/rails/app/templates/test/channels/application_cable/connection_test.rb.tt +0 -13
 - data/lib/rails/generators/rails/plugin/templates/rails/dummy_manifest.js.tt +0 -10
 - data/lib/rails/generators/rails/plugin/templates/rails/engine_manifest.js.tt +0 -6
 - data/lib/rails/generators/rails/plugin/templates/rails/javascripts.js.tt +0 -17
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 8e33b7c8f20e79a1706cdcad58be19d009563111e20a59f96d8c387d4088883c
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 4490c2625c393ab52a69d98a61caaa3a3b3f5093899e8203dad3d28a8a5dbc99
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 7fd02c87add0fdf9ac0b0a1b5ed6b79a278b258f8d40fc02c912e24d6995a4155bdea1a460b795c180e938a7b9f7af793f23a8ff3feec9cb15c4812101d22ce5
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 4788fa68c076ebb9901afd5fc6e24112939de491353096659b1151d841a37872d17f45b21b659287a976916d1b02a1342f2de536a835108a46559cfbd7af3ba2
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,361 +1,185 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ## Rails  
     | 
| 
      
 1 
     | 
    
         
            +
            ## Rails 8.0.0.beta1 (September 26, 2024) ##
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            *    
     | 
| 
      
 3 
     | 
    
         
            +
            *   Exit `rails g` with code 1 if generator could not be found.
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
                 
     | 
| 
       6 
     | 
    
         
            -
                which is the default but not an obligation.
         
     | 
| 
      
 5 
     | 
    
         
            +
                Previously `rails g` returned 0, which would make it harder to catch typos in scripts calling `rails g`.
         
     | 
| 
       7 
6 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                * 
     | 
| 
      
 7 
     | 
    
         
            +
                *Christopher Özbek*
         
     | 
| 
       9 
8 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            *    
     | 
| 
      
 9 
     | 
    
         
            +
            *   Remove `require_*` statements from application.css to align with the transition from Sprockets to Propshaft.
         
     | 
| 
       11 
10 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
       13 
     | 
    
         
            -
                run `rails dbconsole`.
         
     | 
| 
      
 11 
     | 
    
         
            +
                With Propshaft as the default asset pipeline in Rails 8, the require_tree and require_self clauses in application.css are no longer necessary, as they were specific to Sprockets. Additionally, the comment has been updated to clarify that CSS precedence now follows standard cascading order without automatic prioritization by the asset pipeline.
         
     | 
| 
       14 
12 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                * 
     | 
| 
      
 13 
     | 
    
         
            +
                *Eduardo Alencar*
         
     | 
| 
       16 
14 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
            *    
     | 
| 
      
 15 
     | 
    
         
            +
            *   Do not include redis by default in generated Dev Containers.
         
     | 
| 
       18 
16 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                 
     | 
| 
      
 17 
     | 
    
         
            +
                Now that applications use the Solid Queue and Solid Cache gems by default, we do not need to include redis
         
     | 
| 
      
 18 
     | 
    
         
            +
                in the Dev Container. We will only include redis if `--skip-solid` is used when generating an app that uses
         
     | 
| 
      
 19 
     | 
    
         
            +
                Active Job or Action Cable.
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                *Etienne Barrié*
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            *   Remove PWA views and routes if its an API only project.
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                *Jean Boussier*
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
            *   Simplify generated Puma configuration
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                *DHH*, *Rafael Mendonça França*
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
            ## Rails 7.2.0 (August 09, 2024) ##
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
            *   The new `bin/rails boot` command boots the application and exits. Supports the
         
     | 
| 
       37 
     | 
    
         
            -
                standard `-e/--environment` options.
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                *Xavier Noria*
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
            *   Create a Dev Container Generator that generates a Dev Container setup based on the current configuration
         
     | 
| 
       42 
     | 
    
         
            -
                of the application. Usage:
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                `bin/rails devcontainer`
         
     | 
| 
      
 21 
     | 
    
         
            +
                When generating a Dev Container for an existing app, we will not include redis if either of the solid gems
         
     | 
| 
      
 22 
     | 
    
         
            +
                are in use.
         
     | 
| 
       45 
23 
     | 
    
         | 
| 
       46 
24 
     | 
    
         
             
                *Andrew Novoselac*
         
     | 
| 
       47 
25 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
            *    
     | 
| 
       49 
     | 
    
         
            -
                This can be skipped using --skip-rubocop and --skip-ci.
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                *Chris Oliver*
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
            *   Remove support for `oracle`, `sqlserver` and JRuby specific database adapters from the
         
     | 
| 
       54 
     | 
    
         
            -
                `rails new` and `rails db:system:change` commands.
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                The supported options are `sqlite3`, `mysql`, `postgresql` and `trilogy`.
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                *Andrew Novoselac*
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
            *   Add options to `bin/rails app:update`.
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                `bin/rails app:update` now supports the same generic options that generators do:
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                * `--force`: Accept all changes to existing files
         
     | 
| 
       65 
     | 
    
         
            -
                * `--skip`: Refuse all changes to existing files
         
     | 
| 
       66 
     | 
    
         
            -
                * `--pretend`: Don't make any changes
         
     | 
| 
       67 
     | 
    
         
            -
                * `--quiet`: Don't output all changes made
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                *Étienne Barrié*
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
            *   Implement Rails console commands and helpers with IRB v1.13's extension APIs.
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
                Rails console users will now see `helper`, `controller`, `new_session`, and `app` under
         
     | 
| 
       74 
     | 
    
         
            -
                IRB help message's `Helper methods` category. And `reload!` command will be displayed under
         
     | 
| 
       75 
     | 
    
         
            -
                the new `Rails console` commands category.
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
                Prior to this change, Rails console's commands and helper methods are added through IRB's
         
     | 
| 
       78 
     | 
    
         
            -
                private components and don't show up in its help message, which led to poor discoverability.
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                *Stan Lo*
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
            *   Remove deprecated `Rails::Generators::Testing::Behaviour`.
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                *Rafael Mendonça França*
         
     | 
| 
      
 26 
     | 
    
         
            +
            *   Use [Solid Cable](https://github.com/rails/solid_cable) as the default Action Cable adapter in production, configured as a separate queue database in config/database.yml. It keeps messages in a table and continuously polls for updates. This makes it possible to drop the common dependency on Redis, if it isn't needed for any other purpose. Despite polling, the performance of Solid Cable is comparable to Redis in most situations. And in all circumstances, it makes it easier to deploy Rails when Redis is no longer a required dependency for Action Cable functionality.
         
     | 
| 
       85 
27 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
            * 
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                *Rafael Mendonça França*
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
            *   Remove deprecated `Rails.config.enable_dependency_loading`.
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
                *Rafael Mendonça França*
         
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
            *   Remove deprecated `Rails.application.secrets`.
         
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
                *Rafael Mendonça França*
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
            *   Generated Gemfile will include `require: "debug/prelude"` for the `debug` gem.
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
                Requiring `debug` gem directly automatically activates it, which could introduce
         
     | 
| 
       101 
     | 
    
         
            -
                additional overhead and memory usage even without entering a debugging session.
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
                By making Bundler require `debug/prelude` instead, developers can keep their access
         
     | 
| 
       104 
     | 
    
         
            -
                to breakpoint methods like `debugger` or `binding.break`, but the debugger won't be
         
     | 
| 
       105 
     | 
    
         
            -
                activated until a breakpoint is hit.
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
                *Stan Lo*
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
            *   Skip generating a `test` job in ci.yml when a new application is generated with the
         
     | 
| 
       110 
     | 
    
         
            -
                `--skip-test` option.
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                *Steve Polito*
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
            *   Update the `.node-version` file conditionally generated for new applications to 20.11.1
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                *Steve Polito*
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
            *   Fix sanitizer vendor configuration in 7.1 defaults.
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                In apps where rails-html-sanitizer was not eagerly loaded, the sanitizer default could end up
         
     | 
| 
       121 
     | 
    
         
            -
                being Rails::HTML4::Sanitizer when it should be set to Rails::HTML5::Sanitizer.
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
                *Mike Dalessio*, *Rafael Mendonça França*
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
            *   Set `action_mailer.default_url_options` values in `development` and `test`.
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
                Prior to this commit, new Rails applications would raise `ActionView::Template::Error`
         
     | 
| 
       128 
     | 
    
         
            -
                if a mailer included a url built with a `*_path` helper.
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
                *Steve Polito*
         
     | 
| 
      
 28 
     | 
    
         
            +
                *DHH*
         
     | 
| 
       131 
29 
     | 
    
         | 
| 
       132 
     | 
    
         
            -
            *    
     | 
| 
      
 30 
     | 
    
         
            +
            *   Use [Solid Queue](https://github.com/rails/solid_queue) as the default Active Job backend in production, configured as a separate queue database in config/database.yml. In a single-server deployment, it'll run as a Puma plugin. This is configured in `config/deploy.yml` and can easily be changed to use a dedicated jobs machine.
         
     | 
| 
       133 
31 
     | 
    
         | 
| 
       134 
     | 
    
         
            -
                 
     | 
| 
      
 32 
     | 
    
         
            +
                *DHH*
         
     | 
| 
       135 
33 
     | 
    
         | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
                assert_initializer "mail_interceptors.rb"
         
     | 
| 
       138 
     | 
    
         
            -
                ```
         
     | 
| 
      
 34 
     | 
    
         
            +
            *   Use [Solid Cache](https://github.com/rails/solid_cache) as the default Rails.cache backend in production, configured as a separate cache database in config/database.yml.
         
     | 
| 
       139 
35 
     | 
    
         | 
| 
       140 
     | 
    
         
            -
                * 
     | 
| 
      
 36 
     | 
    
         
            +
                *DHH*
         
     | 
| 
       141 
37 
     | 
    
         | 
| 
       142 
     | 
    
         
            -
            *    
     | 
| 
      
 38 
     | 
    
         
            +
            *   Add Rails::Rack::SilenceRequest middleware and use it via `config.silence_healthcheck_path = path`
         
     | 
| 
      
 39 
     | 
    
         
            +
                to silence requests to "/up". This prevents the Kamal-required health checks from clogging up
         
     | 
| 
      
 40 
     | 
    
         
            +
                the production logs.
         
     | 
| 
       143 
41 
     | 
    
         | 
| 
       144 
     | 
    
         
            -
                 
     | 
| 
      
 42 
     | 
    
         
            +
                *DHH*
         
     | 
| 
       145 
43 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
                 - A redis container for Kredis, ActionCable etc.
         
     | 
| 
       148 
     | 
    
         
            -
                 - A database (SQLite, Postgres, MySQL or MariaDB)
         
     | 
| 
       149 
     | 
    
         
            -
                 - A Headless chrome container for system tests
         
     | 
| 
       150 
     | 
    
         
            -
                 - Active Storage configured to use the local disk and with preview features working
         
     | 
| 
      
 44 
     | 
    
         
            +
            *   Introduce `mariadb-mysql` and `mariadb-trilogy` database options for `rails new`
         
     | 
| 
       151 
45 
     | 
    
         | 
| 
       152 
     | 
    
         
            -
                 
     | 
| 
      
 46 
     | 
    
         
            +
                When used with the `--devcontainer` flag, these options will use `mariadb` as the database for the
         
     | 
| 
      
 47 
     | 
    
         
            +
                Dev Container. The original `mysql` and `trilogy` options will use `mysql`. Users who are not
         
     | 
| 
      
 48 
     | 
    
         
            +
                generating a Dev Container do not need to use the new options.
         
     | 
| 
       153 
49 
     | 
    
         | 
| 
       154 
     | 
    
         
            -
                 
     | 
| 
      
 50 
     | 
    
         
            +
                *Andrew Novoselac*
         
     | 
| 
       155 
51 
     | 
    
         | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
      
 52 
     | 
    
         
            +
            *   Deprecate `::STATS_DIRECTORIES`.
         
     | 
| 
       157 
53 
     | 
    
         | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
      
 54 
     | 
    
         
            +
                The global constant `STATS_DIRECTORIES` has been deprecated in favor of
         
     | 
| 
      
 55 
     | 
    
         
            +
                `Rails::CodeStatistics.register_directory`.
         
     | 
| 
       159 
56 
     | 
    
         | 
| 
       160 
     | 
    
         
            -
                 
     | 
| 
      
 57 
     | 
    
         
            +
                Add extra directories with `Rails::CodeStatistics.register_directory(label, path)`:
         
     | 
| 
       161 
58 
     | 
    
         | 
| 
       162 
59 
     | 
    
         
             
                ```ruby
         
     | 
| 
       163 
     | 
    
         
            -
                 
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
       165 
     | 
    
         
            -
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
                require "rails/code_statistics"
         
     | 
| 
      
 61 
     | 
    
         
            +
                Rails::CodeStatistics.register_directory('My Directory', 'path/to/dir')
         
     | 
| 
       166 
62 
     | 
    
         
             
                ```
         
     | 
| 
       167 
63 
     | 
    
         | 
| 
       168 
     | 
    
         
            -
                * 
     | 
| 
      
 64 
     | 
    
         
            +
                *Petrik de Heus*
         
     | 
| 
       169 
65 
     | 
    
         | 
| 
       170 
     | 
    
         
            -
            *    
     | 
| 
      
 66 
     | 
    
         
            +
            *   Enable query log tags by default on development env
         
     | 
| 
       171 
67 
     | 
    
         | 
| 
       172 
     | 
    
         
            -
                 
     | 
| 
      
 68 
     | 
    
         
            +
                This can be used to trace troublesome SQL statements back to the application
         
     | 
| 
      
 69 
     | 
    
         
            +
                code that generated these statements. It is also useful when using multiple
         
     | 
| 
      
 70 
     | 
    
         
            +
                databases because the query logs can identify which database is being used.
         
     | 
| 
       173 
71 
     | 
    
         | 
| 
       174 
     | 
    
         
            -
            * 
     | 
| 
      
 72 
     | 
    
         
            +
                *Matheus Richard*
         
     | 
| 
       175 
73 
     | 
    
         | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
      
 74 
     | 
    
         
            +
            *   Defer route drawing to the first request, or when url_helpers are called
         
     | 
| 
       177 
75 
     | 
    
         | 
| 
       178 
     | 
    
         
            -
             
     | 
| 
      
 76 
     | 
    
         
            +
                Executes the first routes reload in middleware, or when a route set's
         
     | 
| 
      
 77 
     | 
    
         
            +
                url_helpers receives a route call / asked if it responds to a route.
         
     | 
| 
      
 78 
     | 
    
         
            +
                Previously, this was executed unconditionally on boot, which can
         
     | 
| 
      
 79 
     | 
    
         
            +
                slow down boot time unnecessarily for larger apps with lots of routes.
         
     | 
| 
       179 
80 
     | 
    
         | 
| 
       180 
     | 
    
         
            -
                 
     | 
| 
      
 81 
     | 
    
         
            +
                Environments like production that have `config.eager_load = true` will
         
     | 
| 
      
 82 
     | 
    
         
            +
                continue to eagerly load routes on boot.
         
     | 
| 
       181 
83 
     | 
    
         | 
| 
       182 
     | 
    
         
            -
            * 
     | 
| 
       183 
     | 
    
         
            -
                rails new generator command. Update ARGVScrubber to ignore text after `#` symbols.
         
     | 
| 
      
 84 
     | 
    
         
            +
                *Gannon McGibbon*
         
     | 
| 
       184 
85 
     | 
    
         | 
| 
       185 
     | 
    
         
            -
             
     | 
| 
      
 86 
     | 
    
         
            +
            *   Generate form helpers to use `textarea*` methods instead of `text_area*` methods
         
     | 
| 
       186 
87 
     | 
    
         | 
| 
       187 
     | 
    
         
            -
            * 
     | 
| 
      
 88 
     | 
    
         
            +
                *Sean Doyle*
         
     | 
| 
       188 
89 
     | 
    
         | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
      
 90 
     | 
    
         
            +
            *   Add authentication generator to give a basic start to an authentication system using database-tracked sessions and password reset.
         
     | 
| 
       190 
91 
     | 
    
         | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
      
 92 
     | 
    
         
            +
                Generate with...
         
     | 
| 
       192 
93 
     | 
    
         | 
| 
       193 
     | 
    
         
            -
                ``` 
     | 
| 
       194 
     | 
    
         
            -
                 
     | 
| 
       195 
     | 
    
         
            -
                my-app(test)> # for RAILS_ENV=test
         
     | 
| 
       196 
     | 
    
         
            -
                my-app(prod)> # for RAILS_ENV=production
         
     | 
| 
       197 
     | 
    
         
            -
                my-app(my_env)> # for RAILS_ENV=my_env
         
     | 
| 
      
 94 
     | 
    
         
            +
                ```
         
     | 
| 
      
 95 
     | 
    
         
            +
                bin/rails generate authentication
         
     | 
| 
       198 
96 
     | 
    
         
             
                ```
         
     | 
| 
       199 
97 
     | 
    
         | 
| 
       200 
     | 
    
         
            -
                 
     | 
| 
       201 
     | 
    
         
            -
                For example, `MyApp` will displayed as `my-app` in the prompt.
         
     | 
| 
       202 
     | 
    
         
            -
             
     | 
| 
       203 
     | 
    
         
            -
                Additionally, the environment name will be colorized when the environment is
         
     | 
| 
       204 
     | 
    
         
            -
                `development` (blue), `test` (blue), or `production` (red), if your
         
     | 
| 
       205 
     | 
    
         
            -
                terminal supports it.
         
     | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
       207 
     | 
    
         
            -
                *Stan Lo*
         
     | 
| 
       208 
     | 
    
         
            -
             
     | 
| 
       209 
     | 
    
         
            -
            *   Ensure `autoload_paths`, `autoload_once_paths`, `eager_load_paths`, and
         
     | 
| 
       210 
     | 
    
         
            -
                `load_paths` only have directories when initialized from engine defaults.
         
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
                Previously, files under the `app` directory could end up there too.
         
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
                *Takumasa Ochi*
         
     | 
| 
       215 
     | 
    
         
            -
             
     | 
| 
       216 
     | 
    
         
            -
            *   Prevent unnecessary application reloads in development.
         
     | 
| 
       217 
     | 
    
         
            -
             
     | 
| 
       218 
     | 
    
         
            -
                Previously, some files outside autoload paths triggered unnecessary reloads.
         
     | 
| 
       219 
     | 
    
         
            -
                With this fix, application reloads according to `Rails.autoloaders.main.dirs`,
         
     | 
| 
       220 
     | 
    
         
            -
                thereby preventing unnecessary reloads.
         
     | 
| 
       221 
     | 
    
         
            -
             
     | 
| 
       222 
     | 
    
         
            -
                *Takumasa Ochi*
         
     | 
| 
       223 
     | 
    
         
            -
             
     | 
| 
       224 
     | 
    
         
            -
            *   Use `oven-sh/setup-bun` in GitHub CI when generating an app with Bun.
         
     | 
| 
       225 
     | 
    
         
            -
             
     | 
| 
       226 
     | 
    
         
            -
                *TangRufus*
         
     | 
| 
       227 
     | 
    
         
            -
             
     | 
| 
       228 
     | 
    
         
            -
            *   Disable `pidfile` generation in the `production` environment.
         
     | 
| 
      
 98 
     | 
    
         
            +
                Generated files:
         
     | 
| 
       229 
99 
     | 
    
         | 
| 
       230 
     | 
    
         
            -
                 
     | 
| 
      
 100 
     | 
    
         
            +
                ```
         
     | 
| 
      
 101 
     | 
    
         
            +
                app/models/current.rb
         
     | 
| 
      
 102 
     | 
    
         
            +
                app/models/user.rb
         
     | 
| 
      
 103 
     | 
    
         
            +
                app/models/session.rb
         
     | 
| 
      
 104 
     | 
    
         
            +
                app/controllers/sessions_controller.rb
         
     | 
| 
      
 105 
     | 
    
         
            +
                app/controllers/passwords_controller.rb
         
     | 
| 
      
 106 
     | 
    
         
            +
                app/mailers/passwords_mailer.rb
         
     | 
| 
      
 107 
     | 
    
         
            +
                app/views/sessions/new.html.erb
         
     | 
| 
      
 108 
     | 
    
         
            +
                app/views/passwords/new.html.erb
         
     | 
| 
      
 109 
     | 
    
         
            +
                app/views/passwords/edit.html.erb
         
     | 
| 
      
 110 
     | 
    
         
            +
                app/views/passwords_mailer/reset.html.erb
         
     | 
| 
      
 111 
     | 
    
         
            +
                app/views/passwords_mailer/reset.text.erb
         
     | 
| 
      
 112 
     | 
    
         
            +
                db/migrate/xxxxxxx_create_users.rb
         
     | 
| 
      
 113 
     | 
    
         
            +
                db/migrate/xxxxxxx_create_sessions.rb
         
     | 
| 
      
 114 
     | 
    
         
            +
                test/mailers/previews/passwords_mailer_preview.rb
         
     | 
| 
      
 115 
     | 
    
         
            +
                ```
         
     | 
| 
       231 
116 
     | 
    
         | 
| 
       232 
     | 
    
         
            -
            * 
     | 
| 
       233 
     | 
    
         
            -
                the `development` environment.
         
     | 
| 
      
 117 
     | 
    
         
            +
                *DHH*
         
     | 
| 
       234 
118 
     | 
    
         | 
| 
       235 
     | 
    
         
            -
                *Adrian Marin*
         
     | 
| 
       236 
119 
     | 
    
         | 
| 
       237 
     | 
    
         
            -
            *    
     | 
| 
      
 120 
     | 
    
         
            +
            *   Add not-null type modifier to migration attributes.
         
     | 
| 
       238 
121 
     | 
    
         | 
| 
       239 
     | 
    
         
            -
                 
     | 
| 
      
 122 
     | 
    
         
            +
                Generating with...
         
     | 
| 
       240 
123 
     | 
    
         | 
| 
       241 
     | 
    
         
            -
                ``` 
     | 
| 
       242 
     | 
    
         
            -
                 
     | 
| 
      
 124 
     | 
    
         
            +
                ```
         
     | 
| 
      
 125 
     | 
    
         
            +
                bin/rails generate migration CreateUsers email_address:string!:uniq password_digest:string!
         
     | 
| 
       243 
126 
     | 
    
         
             
                ```
         
     | 
| 
       244 
127 
     | 
    
         | 
| 
       245 
     | 
    
         
            -
                 
     | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
       247 
     | 
    
         
            -
            *   Raise `ArgumentError` when reading `config.x.something` with arguments:
         
     | 
| 
      
 128 
     | 
    
         
            +
                Produces:
         
     | 
| 
       248 
129 
     | 
    
         | 
| 
       249 
130 
     | 
    
         
             
                ```ruby
         
     | 
| 
       250 
     | 
    
         
            -
                 
     | 
| 
      
 131 
     | 
    
         
            +
                class CreateUsers < ActiveRecord::Migration[8.0]
         
     | 
| 
      
 132 
     | 
    
         
            +
                  def change
         
     | 
| 
      
 133 
     | 
    
         
            +
                    create_table :users do |t|
         
     | 
| 
      
 134 
     | 
    
         
            +
                      t.string :email_address, null: false
         
     | 
| 
      
 135 
     | 
    
         
            +
                      t.string :password_digest, null: false
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
                      t.timestamps
         
     | 
| 
      
 138 
     | 
    
         
            +
                    end
         
     | 
| 
      
 139 
     | 
    
         
            +
                    add_index :users, :email_address, unique: true
         
     | 
| 
      
 140 
     | 
    
         
            +
                  end
         
     | 
| 
      
 141 
     | 
    
         
            +
                end
         
     | 
| 
       251 
142 
     | 
    
         
             
                ```
         
     | 
| 
       252 
143 
     | 
    
         | 
| 
       253 
     | 
    
         
            -
                *Sean Doyle*
         
     | 
| 
       254 
     | 
    
         
            -
             
     | 
| 
       255 
     | 
    
         
            -
            *   Add default PWA files for manifest and service-worker that are served from `app/views/pwa` and can be dynamically rendered through ERB. Mount these files explicitly at the root with default routes in the generated routes file.
         
     | 
| 
       256 
     | 
    
         
            -
             
     | 
| 
       257 
     | 
    
         
            -
                *DHH*
         
     | 
| 
       258 
     | 
    
         
            -
             
     | 
| 
       259 
     | 
    
         
            -
            *   Updated system tests to now use headless Chrome by default for the new applications.
         
     | 
| 
       260 
     | 
    
         
            -
             
     | 
| 
       261 
144 
     | 
    
         
             
                *DHH*
         
     | 
| 
       262 
145 
     | 
    
         | 
| 
       263 
     | 
    
         
            -
            *   Add  
     | 
| 
       264 
     | 
    
         
            -
             
     | 
| 
       265 
     | 
    
         
            -
                *DHH*
         
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
     | 
    
         
            -
            *   Add Brakeman by default for static analysis of security vulnerabilities. Allow skipping with `--skip-brakeman option`.
         
     | 
| 
       268 
     | 
    
         
            -
             
     | 
| 
       269 
     | 
    
         
            -
                *vipulnsward*
         
     | 
| 
       270 
     | 
    
         
            -
             
     | 
| 
       271 
     | 
    
         
            -
            *   Add RuboCop with rules from `rubocop-rails-omakase` by default. Skip with `--skip-rubocop`.
         
     | 
| 
       272 
     | 
    
         
            -
             
     | 
| 
       273 
     | 
    
         
            -
                *DHH* and *zzak*
         
     | 
| 
       274 
     | 
    
         
            -
             
     | 
| 
       275 
     | 
    
         
            -
            *   Use `bin/rails runner --skip-executor` to not wrap the runner script with an
         
     | 
| 
       276 
     | 
    
         
            -
                Executor.
         
     | 
| 
      
 146 
     | 
    
         
            +
            *   Add a `script` folder to applications, and a scripts generator.
         
     | 
| 
       277 
147 
     | 
    
         | 
| 
       278 
     | 
    
         
            -
                 
     | 
| 
      
 148 
     | 
    
         
            +
                The new `script` folder is meant to hold one-off or general purpose scripts,
         
     | 
| 
      
 149 
     | 
    
         
            +
                such as data migration scripts, cleanup scripts, etc.
         
     | 
| 
       279 
150 
     | 
    
         | 
| 
       280 
     | 
    
         
            -
             
     | 
| 
       281 
     | 
    
         
            -
             
     | 
| 
       282 
     | 
    
         
            -
                This will allow for engine defined models, such as inside Active Storage, to respect
         
     | 
| 
       283 
     | 
    
         
            -
                Active Record table name prefix configuration.
         
     | 
| 
       284 
     | 
    
         
            -
             
     | 
| 
       285 
     | 
    
         
            -
                *Chedli Bourguiba*
         
     | 
| 
       286 
     | 
    
         
            -
             
     | 
| 
       287 
     | 
    
         
            -
            *   Fix running `db:system:change` when the app has no Dockerfile.
         
     | 
| 
       288 
     | 
    
         
            -
             
     | 
| 
       289 
     | 
    
         
            -
                *Hartley McGuire*
         
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
       291 
     | 
    
         
            -
            *   In Action Mailer previews, list inline attachments separately from normal
         
     | 
| 
       292 
     | 
    
         
            -
                attachments.
         
     | 
| 
       293 
     | 
    
         
            -
             
     | 
| 
       294 
     | 
    
         
            -
                For example, attachments that were previously listed like
         
     | 
| 
       295 
     | 
    
         
            -
             
     | 
| 
       296 
     | 
    
         
            -
                  > Attachments: logo.png file1.pdf file2.pdf
         
     | 
| 
       297 
     | 
    
         
            -
             
     | 
| 
       298 
     | 
    
         
            -
                will now be listed like
         
     | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
       300 
     | 
    
         
            -
                  > Attachments: file1.pdf file2.pdf (Inline: logo.png)
         
     | 
| 
       301 
     | 
    
         
            -
             
     | 
| 
       302 
     | 
    
         
            -
                *Christian Schmidt* and *Jonathan Hefner*
         
     | 
| 
       303 
     | 
    
         
            -
             
     | 
| 
       304 
     | 
    
         
            -
            *   In mailer preview, only show SMTP-To if it differs from the union of To, Cc and Bcc.
         
     | 
| 
       305 
     | 
    
         
            -
             
     | 
| 
       306 
     | 
    
         
            -
                *Christian Schmidt*
         
     | 
| 
       307 
     | 
    
         
            -
             
     | 
| 
       308 
     | 
    
         
            -
            *   Enable YJIT by default on new applications running Ruby 3.3+.
         
     | 
| 
       309 
     | 
    
         
            -
             
     | 
| 
       310 
     | 
    
         
            -
                This can be disabled by setting `Rails.application.config.yjit = false`
         
     | 
| 
       311 
     | 
    
         
            -
             
     | 
| 
       312 
     | 
    
         
            -
                *Jean Boussier*, *Rafael Mendonça França*
         
     | 
| 
       313 
     | 
    
         
            -
             
     | 
| 
       314 
     | 
    
         
            -
            *   In Action Mailer previews, show date from message `Date` header if present.
         
     | 
| 
       315 
     | 
    
         
            -
             
     | 
| 
       316 
     | 
    
         
            -
                *Sampat Badhe*
         
     | 
| 
       317 
     | 
    
         
            -
             
     | 
| 
       318 
     | 
    
         
            -
            *   Exit with non-zero status when the migration generator fails.
         
     | 
| 
       319 
     | 
    
         
            -
             
     | 
| 
       320 
     | 
    
         
            -
                *Katsuhiko YOSHIDA*
         
     | 
| 
       321 
     | 
    
         
            -
             
     | 
| 
       322 
     | 
    
         
            -
            *   Use numeric UID and GID in Dockerfile template.
         
     | 
| 
       323 
     | 
    
         
            -
             
     | 
| 
       324 
     | 
    
         
            -
                The Dockerfile generated by `rails new` sets the default user and group
         
     | 
| 
       325 
     | 
    
         
            -
                by name instead of UID:GID. This can cause the following error in Kubernetes:
         
     | 
| 
      
 151 
     | 
    
         
            +
                A new script generator allows you to create such scripts:
         
     | 
| 
       326 
152 
     | 
    
         | 
| 
       327 
153 
     | 
    
         
             
                ```
         
     | 
| 
       328 
     | 
    
         
            -
                 
     | 
| 
      
 154 
     | 
    
         
            +
                bin/rails generate script my_script
         
     | 
| 
      
 155 
     | 
    
         
            +
                bin/rails generate script data/backfill
         
     | 
| 
       329 
156 
     | 
    
         
             
                ```
         
     | 
| 
       330 
157 
     | 
    
         | 
| 
       331 
     | 
    
         
            -
                 
     | 
| 
       332 
     | 
    
         
            -
             
     | 
| 
       333 
     | 
    
         
            -
                *Ivan Fedotov*
         
     | 
| 
      
 158 
     | 
    
         
            +
                You can run the generated script using:
         
     | 
| 
       334 
159 
     | 
    
         | 
| 
       335 
     | 
    
         
            -
             
     | 
| 
      
 160 
     | 
    
         
            +
                ```
         
     | 
| 
      
 161 
     | 
    
         
            +
                bundle exec ruby script/my_script.rb
         
     | 
| 
      
 162 
     | 
    
         
            +
                bundle exec ruby script/data/backfill.rb
         
     | 
| 
      
 163 
     | 
    
         
            +
                ```
         
     | 
| 
       336 
164 
     | 
    
         | 
| 
       337 
     | 
    
         
            -
                 
     | 
| 
       338 
     | 
    
         
            -
                for `rails new` take different arguments. This change validates them.
         
     | 
| 
      
 165 
     | 
    
         
            +
                *Jerome Dalbert*, *Haroon Ahmed*
         
     | 
| 
       339 
166 
     | 
    
         | 
| 
       340 
     | 
    
         
            -
             
     | 
| 
      
 167 
     | 
    
         
            +
            *   Deprecate `bin/rake stats` in favor of `bin/rails stats`.
         
     | 
| 
       341 
168 
     | 
    
         | 
| 
       342 
     | 
    
         
            -
            * 
     | 
| 
      
 169 
     | 
    
         
            +
                *Juan Vásquez*
         
     | 
| 
       343 
170 
     | 
    
         | 
| 
       344 
     | 
    
         
            -
             
     | 
| 
       345 
     | 
    
         
            -
                generator tests, we add the ability to conditionally print `$stdout`
         
     | 
| 
       346 
     | 
    
         
            -
                instead of capturing it.
         
     | 
| 
      
 171 
     | 
    
         
            +
            *   Add internal page `/rails/info/notes`, that displays the same information as `bin/rails notes`.
         
     | 
| 
       347 
172 
     | 
    
         | 
| 
       348 
     | 
    
         
            -
                 
     | 
| 
      
 173 
     | 
    
         
            +
                *Deepak Mahakale*
         
     | 
| 
       349 
174 
     | 
    
         | 
| 
       350 
     | 
    
         
            -
             
     | 
| 
       351 
     | 
    
         
            -
                 
     | 
| 
       352 
     | 
    
         
            -
                ```
         
     | 
| 
      
 175 
     | 
    
         
            +
            *   Add Rubocop and GitHub Actions to plugin generator.
         
     | 
| 
      
 176 
     | 
    
         
            +
                This can be skipped using --skip-rubocop and --skip-ci.
         
     | 
| 
       353 
177 
     | 
    
         | 
| 
       354 
     | 
    
         
            -
                * 
     | 
| 
      
 178 
     | 
    
         
            +
                *Chris Oliver*
         
     | 
| 
       355 
179 
     | 
    
         | 
| 
       356 
     | 
    
         
            -
            *    
     | 
| 
       357 
     | 
    
         
            -
                 
     | 
| 
      
 180 
     | 
    
         
            +
            *   Use Kamal for deployment by default, which includes generating a Rails-specific config/deploy.yml.
         
     | 
| 
      
 181 
     | 
    
         
            +
                This can be skipped using --skip-kamal. See more: https://kamal-deploy.org/
         
     | 
| 
       358 
182 
     | 
    
         | 
| 
       359 
     | 
    
         
            -
                * 
     | 
| 
      
 183 
     | 
    
         
            +
                *DHH*
         
     | 
| 
       360 
184 
     | 
    
         | 
| 
       361 
     | 
    
         
            -
            Please check [7- 
     | 
| 
      
 185 
     | 
    
         
            +
            Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/railties/CHANGELOG.md) for previous changes.
         
     | 
| 
         @@ -110,7 +110,7 @@ module Minitest 
     | 
|
| 
       110 
110 
     | 
    
         
             
              # minitest-reporters, maxitest, and others.
         
     | 
| 
       111 
111 
     | 
    
         
             
              def self.plugin_rails_init(options)
         
     | 
| 
       112 
112 
     | 
    
         
             
                # Don't mess with Minitest unless RAILS_ENV is set
         
     | 
| 
       113 
     | 
    
         
            -
                return unless ENV["RAILS_ENV"]
         
     | 
| 
      
 113 
     | 
    
         
            +
                return unless ENV["RAILS_ENV"] || ENV["RAILS_MINITEST_PLUGIN"]
         
     | 
| 
       114 
114 
     | 
    
         | 
| 
       115 
115 
     | 
    
         
             
                unless options[:full_backtrace]
         
     | 
| 
       116 
116 
     | 
    
         
             
                  # Plugin can run without Rails loaded, check before filtering.
         
     | 
| 
         @@ -15,7 +15,7 @@ module Rails 
     | 
|
| 
       15 
15 
     | 
    
         
             
                                :cache_classes, :cache_store, :consider_all_requests_local, :console,
         
     | 
| 
       16 
16 
     | 
    
         
             
                                :eager_load, :exceptions_app, :file_watcher, :filter_parameters, :precompile_filter_parameters,
         
     | 
| 
       17 
17 
     | 
    
         
             
                                :force_ssl, :helpers_paths, :hosts, :host_authorization, :logger, :log_formatter,
         
     | 
| 
       18 
     | 
    
         
            -
                                :log_tags, :railties_order, :relative_url_root,
         
     | 
| 
      
 18 
     | 
    
         
            +
                                :log_tags, :silence_healthcheck_path, :railties_order, :relative_url_root,
         
     | 
| 
       19 
19 
     | 
    
         
             
                                :ssl_options, :public_file_server,
         
     | 
| 
       20 
20 
     | 
    
         
             
                                :session_options, :time_zone, :reload_classes_only_on_change,
         
     | 
| 
       21 
21 
     | 
    
         
             
                                :beginning_of_week, :filter_redirect, :x,
         
     | 
| 
         @@ -62,6 +62,7 @@ module Rails 
     | 
|
| 
       62 
62 
     | 
    
         
             
                    @exceptions_app                          = nil
         
     | 
| 
       63 
63 
     | 
    
         
             
                    @autoflush_log                           = true
         
     | 
| 
       64 
64 
     | 
    
         
             
                    @log_formatter                           = ActiveSupport::Logger::SimpleFormatter.new
         
     | 
| 
      
 65 
     | 
    
         
            +
                    @silence_healthcheck_path                = nil
         
     | 
| 
       65 
66 
     | 
    
         
             
                    @eager_load                              = nil
         
     | 
| 
       66 
67 
     | 
    
         
             
                    @secret_key_base                         = nil
         
     | 
| 
       67 
68 
     | 
    
         
             
                    @api_only                                = false
         
     | 
| 
         @@ -114,7 +115,9 @@ module Rails 
     | 
|
| 
       114 
115 
     | 
    
         
             
                        action_controller.forgery_protection_origin_check = true
         
     | 
| 
       115 
116 
     | 
    
         
             
                      end
         
     | 
| 
       116 
117 
     | 
    
         | 
| 
       117 
     | 
    
         
            -
                       
     | 
| 
      
 118 
     | 
    
         
            +
                      if respond_to?(:active_support)
         
     | 
| 
      
 119 
     | 
    
         
            +
                        active_support.to_time_preserves_timezone = :offset
         
     | 
| 
      
 120 
     | 
    
         
            +
                      end
         
     | 
| 
       118 
121 
     | 
    
         | 
| 
       119 
122 
     | 
    
         
             
                      if respond_to?(:active_record)
         
     | 
| 
       120 
123 
     | 
    
         
             
                        active_record.belongs_to_required_by_default = true
         
     | 
| 
         @@ -335,6 +338,16 @@ module Rails 
     | 
|
| 
       335 
338 
     | 
    
         
             
                        active_record.postgresql_adapter_decode_dates = true
         
     | 
| 
       336 
339 
     | 
    
         
             
                        active_record.validate_migration_timestamps = true
         
     | 
| 
       337 
340 
     | 
    
         
             
                      end
         
     | 
| 
      
 341 
     | 
    
         
            +
                    when "8.0"
         
     | 
| 
      
 342 
     | 
    
         
            +
                      load_defaults "7.2"
         
     | 
| 
      
 343 
     | 
    
         
            +
             
     | 
| 
      
 344 
     | 
    
         
            +
                      if respond_to?(:active_support)
         
     | 
| 
      
 345 
     | 
    
         
            +
                        active_support.to_time_preserves_timezone = :zone
         
     | 
| 
      
 346 
     | 
    
         
            +
                      end
         
     | 
| 
      
 347 
     | 
    
         
            +
             
     | 
| 
      
 348 
     | 
    
         
            +
                      if respond_to?(:action_dispatch)
         
     | 
| 
      
 349 
     | 
    
         
            +
                        action_dispatch.strict_freshness = true
         
     | 
| 
      
 350 
     | 
    
         
            +
                      end
         
     | 
| 
       338 
351 
     | 
    
         
             
                    else
         
     | 
| 
       339 
352 
     | 
    
         
             
                      raise "Unknown version #{target_version.to_s.inspect}"
         
     | 
| 
       340 
353 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -54,6 +54,10 @@ module Rails 
     | 
|
| 
       54 
54 
     | 
    
         
             
                      middleware.use ::ActionDispatch::RequestId, header: config.action_dispatch.request_id_header
         
     | 
| 
       55 
55 
     | 
    
         
             
                      middleware.use ::ActionDispatch::RemoteIp, config.action_dispatch.ip_spoofing_check, config.action_dispatch.trusted_proxies
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
      
 57 
     | 
    
         
            +
                      if path = config.silence_healthcheck_path
         
     | 
| 
      
 58 
     | 
    
         
            +
                        middleware.use ::Rails::Rack::SilenceRequest, path: path
         
     | 
| 
      
 59 
     | 
    
         
            +
                      end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
       57 
61 
     | 
    
         
             
                      middleware.use ::Rails::Rack::Logger, config.log_tags
         
     | 
| 
       58 
62 
     | 
    
         
             
                      middleware.use ::ActionDispatch::ShowExceptions, show_exceptions_app
         
     | 
| 
       59 
63 
     | 
    
         
             
                      middleware.use ::ActionDispatch::DebugExceptions, app, config.debug_exception_response_format
         
     | 
| 
         @@ -143,6 +143,7 @@ module Rails 
     | 
|
| 
       143 
143 
     | 
    
         
             
                      app.routes.prepend do
         
     | 
| 
       144 
144 
     | 
    
         
             
                        get "/rails/info/properties" => "rails/info#properties", internal: true
         
     | 
| 
       145 
145 
     | 
    
         
             
                        get "/rails/info/routes"     => "rails/info#routes",     internal: true
         
     | 
| 
      
 146 
     | 
    
         
            +
                        get "/rails/info/notes"      => "rails/info#notes",      internal: true
         
     | 
| 
       146 
147 
     | 
    
         
             
                        get "/rails/info"            => "rails/info#index",      internal: true
         
     | 
| 
       147 
148 
     | 
    
         
             
                      end
         
     | 
| 
       148 
149 
     | 
    
         | 
| 
         @@ -159,7 +160,6 @@ module Rails 
     | 
|
| 
       159 
160 
     | 
    
         
             
                  initializer :set_routes_reloader_hook do |app|
         
     | 
| 
       160 
161 
     | 
    
         
             
                    reloader = routes_reloader
         
     | 
| 
       161 
162 
     | 
    
         
             
                    reloader.eager_load = app.config.eager_load
         
     | 
| 
       162 
     | 
    
         
            -
                    reloader.execute
         
     | 
| 
       163 
163 
     | 
    
         
             
                    reloaders << reloader
         
     | 
| 
       164 
164 
     | 
    
         | 
| 
       165 
165 
     | 
    
         
             
                    app.reloader.to_run do
         
     | 
| 
         @@ -177,7 +177,7 @@ module Rails 
     | 
|
| 
       177 
177 
     | 
    
         
             
                      ActiveSupport.run_load_hooks(:after_routes_loaded, self)
         
     | 
| 
       178 
178 
     | 
    
         
             
                    end
         
     | 
| 
       179 
179 
     | 
    
         | 
| 
       180 
     | 
    
         
            -
                     
     | 
| 
      
 180 
     | 
    
         
            +
                    reloader.execute_unless_loaded if !app.routes.is_a?(Engine::LazyRouteSet) || app.config.eager_load
         
     | 
| 
       181 
181 
     | 
    
         
             
                  end
         
     | 
| 
       182 
182 
     | 
    
         | 
| 
       183 
183 
     | 
    
         
             
                  # Set clearing dependencies after the finisher hook to ensure paths
         
     | 
| 
         @@ -7,7 +7,7 @@ module Rails 
     | 
|
| 
       7 
7 
     | 
    
         
             
                class RoutesReloader
         
     | 
| 
       8 
8 
     | 
    
         
             
                  include ActiveSupport::Callbacks
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
                  attr_reader :route_sets, :paths, :external_routes
         
     | 
| 
      
 10 
     | 
    
         
            +
                  attr_reader :route_sets, :paths, :external_routes, :loaded
         
     | 
| 
       11 
11 
     | 
    
         
             
                  attr_accessor :eager_load
         
     | 
| 
       12 
12 
     | 
    
         
             
                  attr_writer :run_after_load_paths # :nodoc:
         
     | 
| 
       13 
13 
     | 
    
         
             
                  delegate :execute_if_updated, :execute, :updated?, to: :updater
         
     | 
| 
         @@ -17,9 +17,11 @@ module Rails 
     | 
|
| 
       17 
17 
     | 
    
         
             
                    @route_sets = []
         
     | 
| 
       18 
18 
     | 
    
         
             
                    @external_routes = []
         
     | 
| 
       19 
19 
     | 
    
         
             
                    @eager_load = false
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @loaded = false
         
     | 
| 
       20 
21 
     | 
    
         
             
                  end
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
                  def reload!
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @loaded = true
         
     | 
| 
       23 
25 
     | 
    
         
             
                    clear!
         
     | 
| 
       24 
26 
     | 
    
         
             
                    load_paths
         
     | 
| 
       25 
27 
     | 
    
         
             
                    finalize!
         
     | 
| 
         @@ -28,6 +30,14 @@ module Rails 
     | 
|
| 
       28 
30 
     | 
    
         
             
                    revert
         
     | 
| 
       29 
31 
     | 
    
         
             
                  end
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
      
 33 
     | 
    
         
            +
                  def execute_unless_loaded
         
     | 
| 
      
 34 
     | 
    
         
            +
                    unless @loaded
         
     | 
| 
      
 35 
     | 
    
         
            +
                      execute
         
     | 
| 
      
 36 
     | 
    
         
            +
                      ActiveSupport.run_load_hooks(:after_routes_loaded, Rails.application)
         
     | 
| 
      
 37 
     | 
    
         
            +
                      true
         
     | 
| 
      
 38 
     | 
    
         
            +
                    end
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
       31 
41 
     | 
    
         
             
                private
         
     | 
| 
       32 
42 
     | 
    
         
             
                  def updater
         
     | 
| 
       33 
43 
     | 
    
         
             
                    @updater ||= begin
         
     | 
    
        data/lib/rails/application.rb
    CHANGED
    
    | 
         @@ -9,6 +9,7 @@ require "active_support/deprecation" 
     | 
|
| 
       9 
9 
     | 
    
         
             
            require "active_support/encrypted_configuration"
         
     | 
| 
       10 
10 
     | 
    
         
             
            require "active_support/hash_with_indifferent_access"
         
     | 
| 
       11 
11 
     | 
    
         
             
            require "active_support/configuration_file"
         
     | 
| 
      
 12 
     | 
    
         
            +
            require "active_support/parameter_filter"
         
     | 
| 
       12 
13 
     | 
    
         
             
            require "rails/engine"
         
     | 
| 
       13 
14 
     | 
    
         
             
            require "rails/autoloaders"
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
         @@ -160,6 +161,10 @@ module Rails 
     | 
|
| 
       160 
161 
     | 
    
         
             
                  routes_reloader.reload!
         
     | 
| 
       161 
162 
     | 
    
         
             
                end
         
     | 
| 
       162 
163 
     | 
    
         | 
| 
      
 164 
     | 
    
         
            +
                def reload_routes_unless_loaded # :nodoc:
         
     | 
| 
      
 165 
     | 
    
         
            +
                  initialized? && routes_reloader.execute_unless_loaded
         
     | 
| 
      
 166 
     | 
    
         
            +
                end
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
       163 
168 
     | 
    
         
             
                # Returns a key generator (ActiveSupport::CachingKeyGenerator) for a
         
     | 
| 
       164 
169 
     | 
    
         
             
                # specified +secret_key_base+. The return value is memoized, so additional
         
     | 
| 
       165 
170 
     | 
    
         
             
                # calls with the same +secret_key_base+ will return the same key generator
         
     |