Ruby on rails Rails 5在gem railtie中有条件地要求依赖gem及其初始值设定项
我们正在编写一个gem,其中包括我们的几个共享应用程序的多个常见gem。我们希望能够在消费应用程序的Ruby on rails Rails 5在gem railtie中有条件地要求依赖gem及其初始值设定项,ruby-on-rails,ruby,rubygems,ruby-on-rails-5,gemspecs,Ruby On Rails,Ruby,Rubygems,Ruby On Rails 5,Gemspecs,我们正在编写一个gem,其中包括我们的几个共享应用程序的多个常见gem。我们希望能够在消费应用程序的application.rb或environment.rb/*rb中有一个类似config.fruit\u chain.enable\u transport=true的配置,以便有条件地动态地需要gem及其初始值设定项。但common gem中的初始值设定项不会在railtie中按要求运行。我想知道是否有更好的方法来做到这一点 水果商店/config/application.rb。(消费应用程序)
application.rb
或environment.rb/*rb
中有一个类似config.fruit\u chain.enable\u transport=true
的配置,以便有条件地动态地需要gem及其初始值设定项。但common gem中的初始值设定项不会在railtie中按要求运行。我想知道是否有更好的方法来做到这一点
水果商店/config/application.rb。(消费应用程序)
transport/lib/transport/rails/railtie.rb
module FruitChain
module Rails
class Railtie < ::Rails::Railtie
config.fruit_chain = ActiveSupport::OrderedOptions.new
config.fruit_chain.enable_transport = false
config.before_initialize do |app|
if app.config.fruit_chain.enable_transport
Kernel.require 'transport' <--- this require the gem correct and load it up
app.initializers.find{
|a| a.name === 'transport.configure'
}.run <--- transport.configure initializer doesn't kick off
end
end
end
end
end
module Transport
module Rails
class Railtie < ::Rails::Railtie
initializer 'transport.configure' do |app|
...
end
end
end
end
模块传输
模块导轨
类别Railtie<::Rails::Railtie
初始值设定项“transport.configure”do | app|
...
结束
结束
结束
结束
请更新代码,使模块为常量。也不确定什么是enable_transport
,但为什么不在那里只需要gem呢?e、 g.def enable_transport=(val);如果val&,则需要“传输”!定义?(运输);end
启用运输
是我们在水果链/lib/fruit\u链/rails/railtie.rb
中添加的一个配置选项,这样消费应用程序就可以在应用程序.rb
中执行config.fruit\u链.enable\u transport=true
。基本上,我们需要一种配置的方式来要求传输
gem,或者不在gem中。
module FruitChain
module Rails
class Railtie < ::Rails::Railtie
config.fruit_chain = ActiveSupport::OrderedOptions.new
config.fruit_chain.enable_transport = false
config.before_initialize do |app|
if app.config.fruit_chain.enable_transport
Kernel.require 'transport' <--- this require the gem correct and load it up
app.initializers.find{
|a| a.name === 'transport.configure'
}.run <--- transport.configure initializer doesn't kick off
end
end
end
end
end
require transport/rails/railtie
...
module Transport
end
module Transport
module Rails
class Railtie < ::Rails::Railtie
initializer 'transport.configure' do |app|
...
end
end
end
end