我正在为我的Rails应用程序开发一个gem,它通过Railtie加载到其中。我基本上是在旧的 Rails 应用程序样式中插入模型,以及库和一些初始值设定项。我主要关心的是在整个 Rails 应用程序加载逻辑中不知道我应该最好在哪里插入它们。我对它的要求是:必须在应用程序初始值设定项之前加载 gem 初始值设定项,库也是如此,初始化项访问库信息。在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 钩子,它允许我使用应用程序库加载我的库,并使用应用程序初始值设定项加载初始值设定项。只是我似乎找不到它们。
我认为你想要的是config.after_initialize
.根据这里:
要运行的最后一个可配置块。在框架初始化后调用。
在这里:
after_initialize:在应用程序初始化之后直接运行,但在运行应用程序初始值设定项之前运行。
因此,您将拥有:
module Gemname
class MyCoolRailtie < ::Rails::Railtie
config.after_initialize do
require 'gemname/lib'
require 'gemname/initializers'
end
end
end