我有一个更高级别的应用程序,其中包括两个引擎:
- 核心(引擎)
- API(引擎)
API 引擎取决于 Core 引擎中存在的模型。我想知道如何引用这些。
我试过的
例如,如果核心引擎有模型“用户”,我如何通过 API 引擎引用它?
module Api
describe User do
routes { Api::Engine.routes }
before :each do
::Core::User.create!
end
....
使用此代码,我收到:
Failure/Error: ::Core::User.create!
NameError:
uninitialized constant Core
所以我认为我必须在 api.gemspec 文件中包含核心引擎。
s.add_dependency "core", path: "core/"
但是,看起来捆绑器不喜欢那样。
There was a Gem::Requirement::BadRequirementError while loading
api.gemspec:
Illformed requirement [{:path=>"core/"}] from myAppPath/api/api.gemspec:21:in
我也试过
s.add_dependency "core", path: "../core/"
但这给了我一个类似的错误。
知道应该怎么做才能从引擎中引用Core
模型吗?API
谢谢!
更新 我试图通过 Api 的 Gemfile 将 Core 引擎添加到 Api 引擎中。不幸的是,我得到一个错误。我开始觉得引擎不应该引用其他引擎。那会是真的吗?
/home/.rvm/gems/ruby-2.0.0-p247/gems/railties-
4.0.0/lib/rails/application/routes_reloader.rb:10:in `rescue in execute_if_updated':
Rails::Application::RoutesReloader#execute_if_updated delegated to
updater.execute_if_updated, but updater is nil: #
<Rails::Application::RoutesReloader:0x007fb53b67bce8 @paths=
["/home/myApp/api/spec/dummy/config/routes.rb", "/home/myApp/core/config/routes.rb",
"/home/myApp/api/config/routes.rb"], @route_sets=[#
<ActionDispatch::Routing::RouteSet:0x007fb53b3b8420>, #
<ActionDispatch::Routing::RouteSet:0x007fb53b6008b8>, #
<ActionDispatch::Routing::RouteSet:0x007fb53b6b9b60>]> (RuntimeError)
更新发现 除了下面的答案,我想补充一点,.gemspec 文件没有关于 gem 存储位置的任何信息,即它不会指向 git 存储库或文件路径等。这个在这篇文章中有解释:
http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/