Railtie:如何访问初始化程序和lib加载钩子?

时间:2012-10-08 14:32:17

标签: ruby-on-rails ruby-on-rails-3 gem ruby-on-rails-3.2 railtie

我正在为我的Rails应用程序开发一个gem,它将通过Railtie加载到它中。我基本上是在旧的Rails应用程序风格中插入模型,加上库和一些初始化器。我主要担心的是在整个Rails应用程序加载逻辑中并不完全知道我应该最好插入它们。我的要求是:gem初始化器必须在app初始化器之前加载,与libs相同,初始化器访问lib信息。在Rails应用程序工作流程中,它以某种方式工作。我的短期解决方法如下:

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 

所以这样,我确信libs是在初始化器之前加载的。我非常确定有更好的方法,即访问一些铁路钩子,这允许我使用应用程序库加载我的库,使用应用程序初始化器加载初始化程序。我似乎无法找到它们。

1 个答案:

答案 0 :(得分:11)

我认为你想要的是config.after_initialize。根据{{​​3}}:

  

要运行的最后一个可配置块。在框架初始化后调用。

here

  

after_initialize:在应用程序初始化之后直接运行,但在运行应用程序初始化程序之前运行。

所以你会:

module Gemname
  class MyCoolRailtie < ::Rails::Railtie
    config.after_initialize do
      require 'gemname/lib'
      require 'gemname/initializers'
    end
  end
end