在每次请求时自动重新加载 wisper 监听器

reload wisper listeners automatically at every request

我在 app/listeners 目录中有 wisper 监听器。

我还有 /config/initializers/wisper.rb

module Wisper
  def self.setup
    configure do |config|
      config.broadcaster(:default, Broadcasters::LoggerBroadcaster.new(Rails.logger, Broadcasters::SendBroadcaster.new))
    end
  end
end

Wisper.setup

Wisper.subscribe(ProjectListener.new)
Wisper.subscribe(FeedListener.new)

我能否以某种方式强制 Rails 在每次请求时重新加载监听器?

您可以尝试将订阅包装在 to_prepare 块中,例如:

Rails.application.config.to_prepare do
  Wisper.clear if Rails.env.development?
  Wisper.subscribe(ProjectListener.new)
  Wisper.subscribe(FeedListener.new)
end

to_prepare 在生产环境中调用一次,在开发环境中的每个请求之前调用。

如果您订阅了多个初始化程序,您可以将 Wisper.clear 放入名为“01_clear_subscribers”的初始化程序中,以确保订阅者只被清除一次。

顺便说一下,您不需要覆盖 setup 来配置广播,只需 Wisper.configure do |config|.