2013-08-18 11 views
0

我有一個較高的水平的應用,其包括兩個發動機參考的發動機關於Core引擎中的模型。我想知道如何引用這些。滑軌:</p> <ul> <li>核心(發動機)</li> <li>API(發動機)</li> </ul> <p>的API發動機取決於:從發動機


我已經試過

例如,如果核心引擎具有典型的「用戶」,我如何通過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/" 

但給了我一個類似的錯誤。

任何想法應該怎麼做來引用API引擎的Core模型?

謝謝!

更新 我試圖通過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文件沒有對其中的寶石將被存儲任何信息,即它不會點到一個Git倉庫,或文件路徑等,這是在這篇文章中解釋說:

http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

+0

添加它到你的API的gem文件,如gem「core」,路徑:「path/to/core /」。 –

+0

在Gemfile中?是的,我認爲可能是這樣。我只是試過 - 得到了一個不同的錯誤,但我有一種感覺,這個新錯誤是無關的。 – Karan

回答

1

有2件事情需要明白:

如果你的發動機應該是公共的(例如Devise發動機),那麼你會想在gemspec中引用你的Core依賴。不過,您將無法使用path來引用它。但對於公共引擎,這不是問題,因爲公共引擎會在某個時間點在Rubygems上。

如果您的引擎是私有的,並且只用於清理您的代碼庫,那麼將gem 'core', path: '../core'添加到您的引擎的Gemfile中就沒有問題。

的一點要記住在這裏:

  • gemspec是依賴聲明(你的引擎,以便需要的寶石來工作)
  • Gemfile是本地或測試依賴性聲明
+0

好的,謝謝你的回答。我有一個完整的'app'rails應用程序,一個'api'引擎,以及一個'核心'引擎,它位於'app'下面。 'api'取決於'核心'引擎,所以我必須在api.gemspec中添加'核心'?如果是這樣的話,我不能讓它工作。 – Karan

+0

'api'和'core'寶石都是私有的,所以我沒有在Rubygems上發佈它們(因此我需要使用路徑,但看起來像* .gemspec不喜歡路徑...) – Karan

+0

順便說一句 - 我將核心添加到我的Gemfile中,但只要我這樣做,我會得到一些錯誤。任何想法可能是什麼? – Karan

相關問題