Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

reload wisper listeners automatically at every request

I have wisper listeners in the app/listeners directory.

I also have the /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)

Can I somehow force Rails to reload the Listeners at every request?

like image 920
Boti Avatar asked Feb 05 '15 14:02

Boti


1 Answers

You could try wrapping the subscribes in a to_prepare block, something like:

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

to_prepare is called once in production and before every request in development environment.

If you subscribe in more than one initializer you could put the Wisper.clear in an initializer named '01_clear_subscribers` to ensure the subscribers are only cleared once.

Incidentally you don't need to override setup to configure the broadcaster, just do Wisper.configure do |config|.

like image 126
Kris Avatar answered Nov 15 '22 17:11

Kris