9

我在 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 在每次请求时重新加载侦听器吗?

4

1 回答 1

21

您可以尝试将订阅包装在一个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|.

于 2015-02-06T09:18:00.667 回答