2012-05-07 53 views
20

我目前正在使用Ruby on Rails構建2個API。一個用於閱讀(查找對象,查詢),另一個用於實際寫入,涉及一種帶有隊列和另一個API的複雜進程。兩個應用程序都需要完全相同的模型和邏輯。在2 Rails API之間共享模型(單獨的應用程序)

我的問題是,在2個rails應用程序之間共享模型規範(關係,範圍,方法)的最常見的最佳實踐或方法是什麼?

謝謝!

+0

您可以更改這兩個API的代碼?還是有一些限制? –

+0

@NigelThorne我當然可以,他們都是我自己造的。 – Gotjosh

回答

4

我會這樣做的方式是「可掛載引擎」。查看優秀的Railscast by Ryan Bates初學者和engine-section at api.rubyonrails.org瞭解更多詳情。

與問候,曼迪

+0

該railscast是假定旨在爲新的應用程序,但它的第一個API已經制作,除了雖然引擎,你會分享控制器和意見,如果我是正確的,這不是我的情況... – Gotjosh

+2

@Gotjosh你可以提取你現有的模型進入引擎(這是最好的包裝成寶石)。然後將這個寶石包含到您的舊應用程序中,並且可以使用您的模型。您可以將寶石包含到您喜歡的任何其他應用程序中。不,引擎不會自動提供控制器。引擎可以提供Rails應用程序,模型,視圖,控制器,資產文件(JS,CSS)等的任何或所有部分。關於此的一本好書是JoséValim的「Crafting Rails應用程序」。 –

1

,你可以將其他項目模型文件夾添加到自動加載路徑中S:

rails new test1 
rails new test2 
cd test1 
rails g model User 
cd ../test2/ 
# ACTION REQUIRED: edit config/application.rb adding this line 
# inside the class Application < Rails::Application block: 
# 
# config.autoload_paths += %W(#{config.root}/../test1/app/models) 
# 
mkdir db/migrate 
cp ../test1/db/migrate/*_create_users.rb db/ 
mv db/*_create_users.rb db/migrate/ 
rake db:migrate 
rails r 'puts User.inspect' 
#=> User(id: integer, created_at: datetime, updated_at: datetime) 

您還可以設置整個事情纔能有兩個app/models文件夾爲私有,使用第三共享文件夾,加入這項目:

# config.autoload_paths += %W(/path/to/a/shared/folder) 

此文件夾甚至可以不是每個項目的相同文件夾,所以它可能是一個git子模塊的路徑,例如(如果你使用GIT,我建議這個解決方案)。

的另一個選項是指向app/models到共享文件夾的軟鏈接

1

我這樣做這一招是不實際使用Rails的技巧。我使用「git」技巧,並從第三個共享代碼倉庫中提取代碼。我將它作爲引擎放入這兩個應用程序中,並作爲外部git參考。

這是一個更多的工作,但是一旦你在一個應用程序中完成了一次,就很容易將它用作下一個應用程序的模板。

+0

這並不意味着你必須在一個應用程序中將更改推送到Git,然後才能在其他應用程序中看到它們嗎?你將如何開發和測試新的東西? 「發動機」是什麼意思? – Chloe

相關問題