Ruby on rails Rails 5在gem railtie中有条件地要求依赖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。(消费应用程序)

我们正在编写一个gem,其中包括我们的几个共享应用程序的多个常见gem。我们希望能够在消费应用程序的
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