如何自动/动态安装 Rails 引擎?

Sti*_*k1n 3 ruby ruby-on-rails ruby-on-rails-3

在 Rails 应用程序中使用可挂载引擎时,有必要在父应用程序config/routes.rb文件中挂载这个引擎,如下所示:

mount MyEngine::Engine, at: "/my_engine"
Run Code Online (Sandbox Code Playgroud)

但是,是否也有可能以某种方式在父应用程序中动态安装引擎,例如在安装引擎期间的初始化程序调用中bundle install

小智 5

module MyEngine
  class Engine < ::Rails::Engine
    isolate_namespace MyEngine
    config.my_engine = ActiveSupport::OrderedOptions.new
    initializer 'my_engine.configuration' do |app|
      if app.config.my_engine[:mounted_path]
        app.routes.append do
          mount MyEngine::Engine => app.config.my_engine[:mounted_path]
        end
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在主应用程序中config/application.rb,您可以设置

config.my_engine.mounted_path = "/some_path_here"
Run Code Online (Sandbox Code Playgroud)