Observer: Loosing observation after initial request

I am attempting to use the Observer feature in ActiveRecord to monitor a set of objects. My observer is not named after the objects it is monitoring (because it is monitoring more than one object) so I have the following in my environment.rb:

Rails::Initializer.run do |config|    config.active_record.observers = :message_observer end

My observer looks something like this:

class MessageObserver < ActiveRecord::Observer    observe Topic, Comment

   def after_create(message)      ...code to handle event...    end end

My problem was that the observer was not firing. After extensive debugging I have determined the problem. If I start up my development environment (Webrick) I have verified the observation is setup correctly and my observer is observing the correct models when the first request is made. When I make a second request the observation is no longer setup and therefore my observer does not fire. So if in the first request I carry out the action that triggers the observer everything works fine. But every request after that fails.

I am guessing the problem has something to do with the automatic reloading of the models during the development environment. So my question is how do I fix this?

Eric

Eric Anderson wrote:

I am guessing the problem has something to do with the automatic reloading of the models during the development environment. So my question is how do I fix this?

The workaround I found based on a blog post[1] was to put this in the ApplicationController:

observer :message_observer

This way the observer is setup on every request since ApplicationController is reloaded. But this seems like the wrong strategy and like the blog post indicated this will not work in a script or console environment if the environment is reloaded. Anybody know of a better way?

1. http://www.robbyonrails.com/articles/2006/02/27/where-did-my-observer-go