Эквивалент app.executor.to_run и .to_complete в Rails 4.2 - PullRequest
0 голосов
/ 24 июня 2018

Я хочу, чтобы следующий код работал на 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, но я не мог узнать, как это было достигнуто вРельсы 4.2 и ниже.Есть руководство, но я не видел там много: http://guides.rubyonrails.org/threading_and_code_execution.html

1 Ответ

0 голосов
/ 26 июня 2018

Хорошо, ответ - использовать Middleware:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...