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 A. 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?

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