-
Notifications
You must be signed in to change notification settings - Fork 21.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use Thruster by default to Rails 8 #51793
Conversation
…MD and still run db:prepare if we are starting the server
On second thought, we can't just expose 80/443, since we'll need to be able to sit behind Kamal's proxy for deployment. What do you suggest, @kevinmcconnell? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dhh this looks great!
On second thought, we can't just expose 80/443, since we'll need to be able to sit behind Kamal's proxy for deployment.
I think exposing 80 should be enough to work with current Kamal, because Traefik automatically routes to the exposed port (as long as there's only one exposed port). And when running the container directly, outside of Kamal, the -p 80:80 -p 443:443
will still work, since publishing doesn't depend on exposing.
For the next Kamal version we might want to have it automatically route to the first published port, to allow us to list them both. I don't think that's required, but it would be nice.
In any case, Kamal will have to do the TLS termination in this setup, since it needs to be able to inspect the traffic in order to route it properly. But that will be easy to do soon with the new proxy options.
ENV THRUSTER_HTTP_PORT="3000" THRUSTER_TARGET_PORT="3001" PORT="3001" | ||
EXPOSE 3000 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we could just EXPOSE 80
here, and remove the ENV
line. Kamal should proxy to the exposed port automatically, it doesn't need to be 3000.
railties/lib/rails/generators/rails/app/templates/bin/thrust.tt
Outdated
Show resolved
Hide resolved
Correct typo in activerecord changelog for -#50662
Executes the first routes reload in middleware, or when the route set url_helpers is called. Previously, this was executed unconditionally on boot, which can slow down boot time unnecessarily for larger apps with lots of routes.
We need to review the code before executing this workflow, so only trigger when someone merge to this repository.
Ref: #50396 Ref: #51776 `ActiveRecord::Relation` automatically delegates missing methods to the model class wrapped in a `scoping { }` block. This is to support scoping in user defined class methods. The problem however is that it's very error prone for the framework, because we can mistakenly call model methods from inside `Relation` and not realized we're applying a global scope. In the best case scenario it's just a waste of performance, but it can also lead to bugs like #51775 I'm planning to restrict this automatic delegation to methods defined in childs of `ActiveRecord::Base` only: #50396 but for this to work we must first refactor any Rails code that rely on it.
Ref: #50396 Ref: #51776 `ActiveRecord::Relation` automatically delegates missing methods to the model class wrapped in a `scoping { }` block. This is to support scoping in user defined class methods. The problem however is that it's very error prone for the framework, because we can mistakenly call model methods from inside `Relation` and not realized we're applying a global scope. In the best case scenario it's just a waste of performance, but it can also lead to bugs like #51775 I'm planning to restrict this automatic delegation to methods defined in childs of `ActiveRecord::Base` only: #50396 but for this to work we must first refactor any Rails code that rely on it.
Co-authored-by: Chedli Bourguiba <chaadow@users.noreply.github.com>
Ref: #50396 As well as related methods.
This pull request replaces the deprecated `query_constraints:` option with `foreign_key` for destroy_async test models. Follow up #51571 - This commit addresses these two warnings below: ``` % bin/test test/activejob/destroy_association_async_test.rb Using sqlite3 DEPRECATION WARNING: Setting `query_constraints:` option on `Cpk::BookDestroyAsync.has_many :chapters` is deprecated. To maintain current behavior, use the `foreign_key` option instead. (called from new at /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19) /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19:in `new' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19:in `create' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations/builder/association.rb:50:in `create_reflection' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations/builder/association.rb:32:in `build' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations.rb:1531:in `has_many' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/book_destroy_async.rb:7:in `<class:BookDestroyAsync>' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/book_destroy_async.rb:4:in `<module:Cpk>' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/book_destroy_async.rb:3:in `<top (required)>' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `require' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require' /Users/yahonda/src/github.com/rails/rails/activerecord/test/activejob/destroy_association_async_test.rb:27:in `<top (required)>' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `require' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:61:in `block in load_tests' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:60:in `each' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:60:in `load_tests' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:52:in `run' /Users/yahonda/src/github.com/rails/rails/activerecord/test/support/tools.rb:37:in `<top (required)>' bin/test:11:in `require_relative' bin/test:11:in `<main>' DEPRECATION WARNING: Setting `query_constraints:` option on `Cpk::ChapterDestroyAsync.belongs_to :book` is deprecated. To maintain current behavior, use the `foreign_key` option instead. (called from new at /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19) /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19:in `new' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19:in `create' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations/builder/association.rb:50:in `create_reflection' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations/builder/association.rb:32:in `build' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations.rb:1910:in `belongs_to' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/chapter_destroy_async.rb:8:in `<class:ChapterDestroyAsync>' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/chapter_destroy_async.rb:4:in `<module:Cpk>' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/chapter_destroy_async.rb:3:in `<top (required)>' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `require' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require' /Users/yahonda/src/github.com/rails/rails/activerecord/test/activejob/destroy_association_async_test.rb:28:in `<top (required)>' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `require' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:61:in `block in load_tests' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:60:in `each' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:60:in `load_tests' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:52:in `run' /Users/yahonda/src/github.com/rails/rails/activerecord/test/support/tools.rb:37:in `<top (required)>' bin/test:11:in `require_relative' bin/test:11:in `<main>' Run options: --seed 24461 .................... Finished in 0.199597s, 100.2019 runs/s, 370.7471 assertions/s. 20 runs, 74 assertions, 0 failures, 0 errors, 0 skips % ```
Follow up #51782. > But it's overkill for the default case where people use the default style guide, > and it introduces both delay and console output as a cost. When there are no offenses with the coding style generated by code generation, outputting RuboCop results to the console was redundant. Since RuboCop has `--format=quiet` option that suppresses console output when there are no offenses, this PR adds that option: https://docs.rubocop.org/rubocop/1.63/formatters.html#quiet-formatter While this PR doesn't resolve any added execution speed by RuboCop, the frequency of using the generator is not high within the development flow. Therefore, depending on the execution speed, it might be possible to uncomment #51782, but this PR respects the defaults in #51782 and doesn't address that.
This will prevent issues like be0cb4e, which would have resulted in: ``` guides/rails_guides/generator.rb:16:1: W: Lint/Debugger: Remove debugger entry point require "debug". require "debug" ^^^^^^^^^^^^^^^ ``` Disabled the cop in actionpack tests for screenshot_helper and page_dump_helper: ``` actionpack/test/controller/integration_test.rb:1369:9: W: Lint/Debugger: Remove debugger entry point save_and_open_page. save_and_open_page ^^^^^^^^^^^^^^^^^^ actionpack/test/controller/integration_test.rb:1381:11: W: Lint/Debugger: Remove debugger entry point save_and_open_page. save_and_open_page ^^^^^^^^^^^^^^^^^^ actionpack/test/controller/integration_test.rb:1391:39: W: Lint/Debugger: Remove debugger entry point save_and_open_page. assert_raise(InvalidResponse) { save_and_open_page } ^^^^^^^^^^^^^^^^^^ ``` ``` actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:111:13: W: Lint/Debugger: Remove debugger entry point page.save_page(absolute_html_path). page.save_page(absolute_html_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:115:13: W: Lint/Debugger: Remove debugger entry point page.save_screenshot(absolute_image _path). page.save_screenshot(absolute_image_path) ``` The DebuggerRequires option was first available in rubocop v1.63.0, in rubocop/rubocop#12766.
This reverts commit 64ab211.
…as attribute for update
We are only know goign to support mysql2, trilogy, postgresql and sqlite3 adapters in Rails.
* Add Kamal by default
On further reflection, Kamal 2 is going to ship with a custom proxy that supersedes the need for Thruster. It already needs to handle TLS in order to do gapless deploys over HTTPS. Which is the gateway for HTTP/2. Which leaves much less work for Thruster to do. Thruster can still make sense in a scenario where you're not deploying with Kamal, but given the fact that Kamal is going to be a Rails default, it does not make sense to integrate both. |
100% agree 👍 I'll also port Thruster's other features into Kamal's new proxy, where it makes sense to do so. So we can still get the same benefits out of the box, but now with fewer moving parts. |
Turns out we need Thruster still for X-Sendfile acceleration as that has to happen inside the app container. Can't be done by the external proxy without a cumbersome setup to share files. |
Unrelated CI failure. |
* Allow docker entrypoint script to have other preceeding commands in CMD and still run db:prepare if we are starting the server * Add Thruster by default * Include new binstub * Temporarily expose only 80 (via 3000) * Just expose 80 for now, Kamal will need to handle 443 * Correct typo in activerecord changelog [ci skip] Correct typo in activerecord changelog for -rails#50662 * Defer route drawing to the first request, or when url_helpers called. Executes the first routes reload in middleware, or when the route set url_helpers is called. Previously, this was executed unconditionally on boot, which can slow down boot time unnecessarily for larger apps with lots of routes. * Support `touch_all` in batches * Do not trigger devcontainer tests on pull requests We need to review the code before executing this workflow, so only trigger when someone merge to this repository. * Refactor `ActiveRecord::SignedId` to not rely on relation delegation Ref: rails#50396 Ref: rails#51776 `ActiveRecord::Relation` automatically delegates missing methods to the model class wrapped in a `scoping { }` block. This is to support scoping in user defined class methods. The problem however is that it's very error prone for the framework, because we can mistakenly call model methods from inside `Relation` and not realized we're applying a global scope. In the best case scenario it's just a waste of performance, but it can also lead to bugs like rails#51775 I'm planning to restrict this automatic delegation to methods defined in childs of `ActiveRecord::Base` only: rails#50396 but for this to work we must first refactor any Rails code that rely on it. * Refactor `ActiveRecord::TokenFor` to not rely on relation delegation Ref: rails#50396 Ref: rails#51776 `ActiveRecord::Relation` automatically delegates missing methods to the model class wrapped in a `scoping { }` block. This is to support scoping in user defined class methods. The problem however is that it's very error prone for the framework, because we can mistakenly call model methods from inside `Relation` and not realized we're applying a global scope. In the best case scenario it's just a waste of performance, but it can also lead to bugs like rails#51775 I'm planning to restrict this automatic delegation to methods defined in childs of `ActiveRecord::Base` only: rails#50396 but for this to work we must first refactor any Rails code that rely on it. * Fix: batch test assertion order Co-authored-by: Chedli Bourguiba <chaadow@users.noreply.github.com> * Move `ActiveRecord::Base.delete` in `Relation` Ref: rails#50396 * Move `ActiveRecord::Base.destroy` in `Relation` Ref: rails#50396 * Move `ActiveRecord::Base.insert` in `Relation` Ref: rails#50396 As well as related methods. * Use `foreign_key` option for destroy_async test models This pull request replaces the deprecated `query_constraints:` option with `foreign_key` for destroy_async test models. Follow up rails#51571 - This commit addresses these two warnings below: ``` % bin/test test/activejob/destroy_association_async_test.rb Using sqlite3 DEPRECATION WARNING: Setting `query_constraints:` option on `Cpk::BookDestroyAsync.has_many :chapters` is deprecated. To maintain current behavior, use the `foreign_key` option instead. (called from new at /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19) /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19:in `new' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19:in `create' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations/builder/association.rb:50:in `create_reflection' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations/builder/association.rb:32:in `build' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations.rb:1531:in `has_many' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/book_destroy_async.rb:7:in `<class:BookDestroyAsync>' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/book_destroy_async.rb:4:in `<module:Cpk>' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/book_destroy_async.rb:3:in `<top (required)>' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `require' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require' /Users/yahonda/src/github.com/rails/rails/activerecord/test/activejob/destroy_association_async_test.rb:27:in `<top (required)>' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `require' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:61:in `block in load_tests' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:60:in `each' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:60:in `load_tests' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:52:in `run' /Users/yahonda/src/github.com/rails/rails/activerecord/test/support/tools.rb:37:in `<top (required)>' bin/test:11:in `require_relative' bin/test:11:in `<main>' DEPRECATION WARNING: Setting `query_constraints:` option on `Cpk::ChapterDestroyAsync.belongs_to :book` is deprecated. To maintain current behavior, use the `foreign_key` option instead. (called from new at /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19) /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19:in `new' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/reflection.rb:19:in `create' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations/builder/association.rb:50:in `create_reflection' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations/builder/association.rb:32:in `build' /Users/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/associations.rb:1910:in `belongs_to' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/chapter_destroy_async.rb:8:in `<class:ChapterDestroyAsync>' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/chapter_destroy_async.rb:4:in `<module:Cpk>' /Users/yahonda/src/github.com/rails/rails/activerecord/test/models/cpk/chapter_destroy_async.rb:3:in `<top (required)>' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `require' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require' /Users/yahonda/src/github.com/rails/rails/activerecord/test/activejob/destroy_association_async_test.rb:28:in `<top (required)>' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `require' /Users/yahonda/.rbenv/versions/3.3.1/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:61:in `block in load_tests' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:60:in `each' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:60:in `load_tests' /Users/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:52:in `run' /Users/yahonda/src/github.com/rails/rails/activerecord/test/support/tools.rb:37:in `<top (required)>' bin/test:11:in `require_relative' bin/test:11:in `<main>' Run options: --seed 24461 .................... Finished in 0.199597s, 100.2019 runs/s, 370.7471 assertions/s. 20 runs, 74 assertions, 0 failures, 0 errors, 0 skips % ``` * Suppress RuboCop output when there are no offenses in code generation Follow up rails#51782. > But it's overkill for the default case where people use the default style guide, > and it introduces both delay and console output as a cost. When there are no offenses with the coding style generated by code generation, outputting RuboCop results to the console was redundant. Since RuboCop has `--format=quiet` option that suppresses console output when there are no offenses, this PR adds that option: https://docs.rubocop.org/rubocop/1.63/formatters.html#quiet-formatter While this PR doesn't resolve any added execution speed by RuboCop, the frequency of using the generator is not high within the development flow. Therefore, depending on the execution speed, it might be possible to uncomment rails#51782, but this PR respects the defaults in rails#51782 and doesn't address that. * Enable Lint/Debugger This will prevent issues like be0cb4e, which would have resulted in: ``` guides/rails_guides/generator.rb:16:1: W: Lint/Debugger: Remove debugger entry point require "debug". require "debug" ^^^^^^^^^^^^^^^ ``` Disabled the cop in actionpack tests for screenshot_helper and page_dump_helper: ``` actionpack/test/controller/integration_test.rb:1369:9: W: Lint/Debugger: Remove debugger entry point save_and_open_page. save_and_open_page ^^^^^^^^^^^^^^^^^^ actionpack/test/controller/integration_test.rb:1381:11: W: Lint/Debugger: Remove debugger entry point save_and_open_page. save_and_open_page ^^^^^^^^^^^^^^^^^^ actionpack/test/controller/integration_test.rb:1391:39: W: Lint/Debugger: Remove debugger entry point save_and_open_page. assert_raise(InvalidResponse) { save_and_open_page } ^^^^^^^^^^^^^^^^^^ ``` ``` actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:111:13: W: Lint/Debugger: Remove debugger entry point page.save_page(absolute_html_path). page.save_page(absolute_html_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:115:13: W: Lint/Debugger: Remove debugger entry point page.save_screenshot(absolute_image _path). page.save_screenshot(absolute_image_path) ``` The DebuggerRequires option was first available in rubocop v1.63.0, in rubocop/rubocop#12766. * Support `duration` in `ActiveSupport::XmlMini` * Development of Rails 8.0 starts now :tada: * Reapply "Rails 8 will target Ruby 3.3+ only for new apps" This reverts commit 64ab211. * Clean CHANGELOG for 8.0 * Fix rubocop See rubocop/rubocop#12898 for the issue. * Add name to DevContainer compose file Currently when you generate a project the compose.yaml generated file does not include the top-level name property. Not having this top-level name property makes all containers / volumes started by devcontainer to be prepended with the folder name, which is `devcontainer` in the case of the .devcontainer/compose.yml` file. This is ok if you run only one project with devcontainer but starts to get problem if you run multiple projects. If you have one project that runs on postgresql 15 and a new one that runs on postgresql 16 it will fail to boot the postgresql container because both devcontainers is using the same volume: `devcontainer_postgres-data`. This commit fixes this by setting the top-lavel name property with the project name, which will make the containers and volumes to be prepended with the project name and not with `devcontainer`. * Remove support for oracle, sqlserver and JRuby specific database adapters from the new and db:system:change commands. The supported options are sqlite3, mysql, postgresql and trilogy. * Refactoring Database generators Extract all the DB information (gems, dockerfile packages, devcontainer etc.) into an object. This let's us remove the growing number of case statements in this code. * This will be released in 7.2 * Merge pull request rails#51766 from Shopify/revert-actionable-errors-retry Revert "Merge pull request rails#50941 from andrewn617/actionable-cli" * Point user to devcontainer for containerized dev environment * Add Highlights section in the Rails 7.1 release notes * Fix `ActiveRecord::Relation#touch_all` with custom attribute aliased as attribute for update * Remove jruby and oracle related gems from Gemfile We are only know goign to support mysql2, trilogy, postgresql and sqlite3 adapters in Rails. * Add Kamal by default to Rails 8 (rails#51798) * Add Kamal by default * Excess CR * Add Thruster for testing * Update comment to reflect shrunken responsibilities * Use latest Thruster --------- Co-authored-by: Sampat Badhe <sampatbadhe@gmail.com> Co-authored-by: Gannon McGibbon <gannon.mcgibbon@gmail.com> Co-authored-by: fatkodima <fatkodima123@gmail.com> Co-authored-by: Rafael Mendonça França <rafael@rubyonrails.org> Co-authored-by: Jean Boussier <jean.boussier@gmail.com> Co-authored-by: Akhil G Krishnan <akhilgkrishnan4u@gmail.com> Co-authored-by: Chedli Bourguiba <chaadow@users.noreply.github.com> Co-authored-by: Yasuo Honda <yasuo.honda@gmail.com> Co-authored-by: Koichi ITO <koic.ito@gmail.com> Co-authored-by: zzak <zzakscott@gmail.com> Co-authored-by: heka1024 <heka1024@gmail.com> Co-authored-by: Cadu Ribeiro <mail@cadu.dev> Co-authored-by: Andrew Novoselac <andrew.novoselac@shopify.com>
Thruster is an asset compression and caching proxy with X-Sendfile acceleration that speeds up simple production-ready deployments of Rails applications. It runs alongside the Puma and usually behind the Kamal 2 proxy, which offers HTTP/2 and SSL auto-certificates, to help your app run efficiently and safely on the open Internet.
Rails 8 is going to configure the use of Thruster in the Dockerfile by default.