如何将一个发动机安装在另一个可安装的发动机中?

时间:2014-08-22 19:36:56

标签: ruby-on-rails

目前在config / routes.rb的主应用程序中安装了两个引擎,如下所示。

mount firstEngine :: Engine,at:'/ search'和 mount secondEngine :: Engine,at:'/ add'

我想将firstEngine从应用程序安装到secondEngine。换句话说,如何将一个引擎安装在另一个可安装的引擎中?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我一直试图将一个引擎安装在另一个引擎之上,这是我到目前为止所得到的:

#file myapp/config/routes.rb
mount Bar::Engine => "/bar"

#file myapp/Gemfile
gem 'bar', :path => '../bar'

项目结构如下:

my_project_folder
|
+ - myapp
|
+ - 酒吧
|
+ - 巴兹

#file bar/config/routes
mount Baz::Engine => '/baz'

我遇到了将Baz安装在Bar顶部的麻烦,只需添加

#file bar/Gemfile
gem: 'baz', :path => '../baz'

没有用,我得到了未初始化的常量Baz :: Engine错误

解决这个问题:

#file bar/lib/engine.rb
require File.join(File.expand_path('../../../baz/lib', File.dirname(__FILE__)), 'baz')

现在baz.rb正在抱怨:无法加载这样的文件 - baz / engine 所以我改变了:

#file baz/lib/baz.rb
require_relative './baz/engine' # instead of require 'baz/engine'

现在我的/ bar / baz路线工作正常。 这是一个相当丑陋的解决方法,我将寻找更清晰的解决方案,但我的可安装插件正在开发中,我只使用它们来源,所以我暂时不介意。希望它至少有一点帮助。如果您找到更好的解决方案,请告诉我。