加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Railtie:如何访问初始化程序和lib加载钩子?

发布时间:2020-12-17 04:00:31 所属栏目:百科 来源:网络整理
导读:我正在为我的Rails应用程序开发一个gem,它将通过Railtie加载到它中.我基本上是在旧的Rails应用程序风格中插入模型,加上库和一些初始化器.我主要担心的是在整个Rails应用程序加载逻辑中并不完全知道我应该最好插入它们.我的要求是:gem初始化器必须在app初始
我正在为我的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.我非常确定有更好的方法,即访问一些铁路钩子,这允许我使用应用程序库加载我的库,使用应用程序初始化器加载初始化程序.我似乎无法找到它们.

解决方法

我想你想要的是config.after_initialize.根据 here:

Last configurable block to run. Called after frameworks initialize.

和here:

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

所以你会:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读