Railtie: How to access initializer and lib loading hooks?
Asked Answered
K

1

5

I am developing a gem for my Rails application, which be loaded into it through Railtie. I'm basically inserting models into into, plus libraries and a few initializers, in the old Rails app style. My main concern is not knowing exactly in the whole Rails application loading logic where I should best insert them. My requirement for it is: the gem initializers have to be loaded before the app initializers, same thing with the libs, and the initializers access lib information. In the Rails app workflow, it somehow works. My short-term workaround was the following:

module Gemname
  def self.initialize_railtie
    ActiveSupport.on_load :active_record do
      require 'gemname/lib'
      require 'gemname/initializers'
    end
  end
  class Railtie < Rails::Railtie
  initializer 'gemname.insert_into_app' do
    Gemfile.initialize_railtie
  end
end 

So this way, I'm sure that the libs are loaded before the initializers. Just I'm pretty sure there is a better way to do it, namely, access some railtie hook which allows me to load my libs with the app libs and the initializers with the app initializers. Just I can't seem to be able to find them.

Klepac answered 8/10, 2012 at 14:32 Comment(0)
N
12

I think what you want is config.after_initialize. According to here:

Last configurable block to run. Called after frameworks initialize.

and here:

after_initialize: Run directly after the initialization of the application, but before the application initializers are run.

So you would have:

module Gemname
  class MyCoolRailtie < ::Rails::Railtie
    config.after_initialize do
      require 'gemname/lib'
      require 'gemname/initializers'
    end
  end
end
Nadda answered 15/10, 2012 at 22:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.