Эквивалент app.executor.to_run и .to_complete в Rails 4.2

Я хочу сделать следующий код для Rails 4.2:

initializer "action_policy.clear_per_thread_cache" do |app|
    app.executor.to_run { ActionPolicy::PerThreadCache.clear_all }
    app.executor.to_complete { ActionPolicy::PerThreadCache.clear_all }
end

Я знаю, что исполнитель является функцией Rails 5, но не смог узнать о том, как это было достигнуто в Rails 4.2 и ниже. Существует руководство, но я не видел много там: http://guides.rubyonrails.org/threading_and_code_execution.html

ruby-on-rails,multithreading,

0

Ответов: 1


0

Ну, ответ заключается в использовании промежуточного ПО:

initializer "action_policy.clear_per_thread_cache" do |app|
  if Rails::VERSION::MAJOR >= 5
    app.executor.to_run { ActionPolicy::PerThreadCache.clear_all }
    app.executor.to_complete { ActionPolicy::PerThreadCache.clear_all }
  else
    app.middleware.use ActionPolicy::Middleware
  end
end

Вот промежуточное ПО:

# frozen_string_literal: true

module ActionPolicy # :nodoc:
  class Middleware # :nodoc:
    def initialize(app)
      @app = app
    end

    def call(env)
      ActionPolicy::PerThreadCache.clear_all
      status, headers, response = @app.call(env)
      ActionPolicy::PerThreadCache.clear_all

      [status, headers, response]
    end
  end
end
рубин-на-рельсы, многопоточность,
Похожие вопросы
Яндекс.Метрика