0

2 つのエンジンを含む高レベルのアプリがあります。

  • コア(エンジン)
  • API(エンジン)

API エンジンは、コア エンジンに存在するモデルに依存します。これらをどう参考にしようか悩んでいました。


私が試したこと

たとえば、Core エンジンにモデル "User" がある場合、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/

4

1 に答える 1