Module: Gritz::Rails
- Defined in:
- /home/runner/work/gritz/gritz/sources/gritz-rails/lib/gritz/rails/executor.rb,
/home/runner/work/gritz/gritz/sources/gritz-rails/lib/gritz/rails/railtie.rb,
/home/runner/work/gritz/gritz/sources/gritz-rails/lib/gritz/rails/version.rb,
/home/runner/work/gritz/gritz/sources/gritz-rails/lib/gritz/rails.rb
Defined Under Namespace
Modules: ConfigurationDSL Classes: Executor
Constant Summary collapse
- VERSION =
"0.9.1"
Class Method Summary collapse
-
.install(config, application: ::Rails.application) ⇒ Object
Installs Rails execution and fork lifecycle hooks into one server configuration.
Class Method Details
.install(config, application: ::Rails.application) ⇒ Object
Installs Rails execution and fork lifecycle hooks into one server configuration.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File '/home/runner/work/gritz/gritz/sources/gritz-rails/lib/gritz/rails.rb', line 14 def self.install(config, application: ::Rails.application) raise ConfigurationError, "rails_app requires an initialized Rails application" unless application&.initialized? installed = config.middleware.entries.find { |entry| entry.middleware == Executor } if installed raise ConfigurationError, "Rails integration is already installed for another application" unless installed.[:application].equal?(application) return config end development = ::Rails.env.development? ActiveSupport::IsolatedExecutionState.isolation_level = :fiber if config.transport == :async config.reflection = true if development && config.transport == :native first = config.middleware.entries.first if first config.middleware.insert_before(first.middleware, Executor, application:, development:) else config.middleware.use(Executor, application:, development:) end disconnect_pools = lambda do |_index = nil| if defined?(ActiveRecord::Base) ActiveRecord::Base.connection_handler.connection_pool_list(:all).each(&:disconnect!) end end config.add_preloader do ActiveSupport::IsolatedExecutionState.isolation_level = :fiber if config.transport == :async raise ConfigurationError, "Rails development mode requires workers 0" if development && config.workers.positive? application.eager_load! config.controllers.map! { |controller| reloadable_controller(controller) } if development disconnect_pools.call if config.workers.positive? end config.add_hook(:before_fork, &disconnect_pools) config end |