I'm working on a gem that sets properties on ActiveRecord models (such as table_name) dynamically based on a user config option.
I have an initializer that achieves this. My problem however is that in dev mode, these classes are reloaded, so they don't maintain these values set.
So I thought I'd use a railtie to hook into the point where these files are reloaded and run my config again on the models.  My problem however is that config.to_prepare in the railtie appears to run before the reload! actually takes place.  I can prove this with a bit of logging:
module MyMod
  class Railtie < Rails::Railtie
    config.to_prepare do
      Rails.logger.debug("Contact object_id: #{Contact.object_id}")
    end
  end
end
if I load up my console, I get the first log:
Contact object_id: 2202692040
If I check Contact.object_id it matches up:
Contact.object_id  #=> 2202692040
Then I reload!
reload!
Rails logger from my to_prepare logs:
Contact object_id: 2202692040
So it still has the old object_id, but when I check it in the console:
Contact.object_id  #=> 2197355080
Which is the newly loaded class object id.
So how do I get to_prepare to run after the files are reloaded?  Using Rails 3.0.10
update
I've also tried manually attaching this action to the after_prepare callback on the ActionDispatch::Callbacks like so:
initializer "apartment.init" do
  ActionDispatch::Callbacks.set_callback(:prepare, :after) do
    Rails.logger.debug("Contact object_id: #{Contact.object_id}")
  end
end
It does indeed run the callback after the config.to_prepare but it still appears to happen before the files are reloaded...  I get the same behaviour as above.