4

我正在为我的 Rails 应用程序开发一个 gem,它通过 Railtie 加载到其中。我基本上是以旧的 Rails 应用程序样式将模型插入到库和一些初始化程序中。我主要担心的是不知道在整个 Rails 应用程序加载逻辑中我最好将它们插入到哪里。我对它的要求是:gem 初始化程序必须在应用程序初始化程序之前加载,与库相同,初始化程序访问 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 

所以这样,我确定这些库是在初始化程序之前加载的。只是我很确定有更好的方法可以做到这一点,即访问一些 railtie 钩子,它允许我用应用程序库加载我的库,用应用程序初始化程序加载初始化程序。只是我似乎无法找到它们。

4

1 回答 1

11

我想你想要的是config.after_initialize。根据这里

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

这里:

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

所以你会有:

module Gemname
  class MyCoolRailtie < ::Rails::Railtie
    config.after_initialize do
      require 'gemname/lib'
      require 'gemname/initializers'
    end
  end
end
于 2012-10-15T22:36:23.807 回答