2015-02-05 48 views
7

我在app/listeners目錄中有wisper監聽器。在每個請求時自動重新加載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在每一個請求重新加載監聽器?

回答

13

你可以嘗試在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|即可。

+1

這也適用於TDD/BDD模式: Wisper.clear除非Rails.env.production? – Boti 2015-02-27 08:47:01

+5

值得注意的是,這解決了我在哪裏更改了任何Rails代碼導致「X的副本已從模塊樹中刪除但仍處於活動狀態!」的問題錯誤。希望這個評論意味着人們會比我更快地找到這個解決方案! – 2016-02-04 09:50:07

+0

我在Rails項目中遇到了這個問題,我決定使用'before_initialize'而不是'to_prepare',這樣我就可以確保在所有環境的初始化過程中清除只運行一次。 – ecbrodie 2016-12-01 20:56:14

相關問題