【问题标题】:reload wisper listeners automatically at every request在每次请求时自动重新加载 wisper 侦听器
【发布时间】:2015-04-05 11:08:34
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails wisper


    【解决方案1】:

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

    【讨论】:

    • 这也适用于 TDD/BDD 模式:Wisper.clear 除非 Rails.env.production?
    • 值得注意的是,这解决了我对任何 Rails 代码的更改导致“X 的副本已从模块树中删除但仍处于活动状态!”的问题。错误。希望此评论意味着人们会比我更快地找到此解决方案!
    • 我在我的 Rails 项目中遇到了这个问题,我决定使用 before_initialize 而不是 to_prepare,以便确保在所有环境的初始化过程中 clear 只运行一次。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2014-12-11
    • 2021-12-12
    • 2016-01-19
    相关资源
    最近更新 更多