我目前正在使用Ruby on Rails構建2個API。一個用於閱讀(查找對象,查詢),另一個用於實際寫入,涉及一種帶有隊列和另一個API的複雜進程。兩個應用程序都需要完全相同的模型和邏輯。在2 Rails API之間共享模型(單獨的應用程序)
我的問題是,在2個rails應用程序之間共享模型規範(關係,範圍,方法)的最常見的最佳實踐或方法是什麼?
謝謝!
我目前正在使用Ruby on Rails構建2個API。一個用於閱讀(查找對象,查詢),另一個用於實際寫入,涉及一種帶有隊列和另一個API的複雜進程。兩個應用程序都需要完全相同的模型和邏輯。在2 Rails API之間共享模型(單獨的應用程序)
我的問題是,在2個rails應用程序之間共享模型規範(關係,範圍,方法)的最常見的最佳實踐或方法是什麼?
謝謝!
我會這樣做的方式是「可掛載引擎」。查看優秀的Railscast by Ryan Bates初學者和engine-section at api.rubyonrails.org瞭解更多詳情。
與問候,曼迪
該railscast是假定旨在爲新的應用程序,但它的第一個API已經制作,除了雖然引擎,你會分享控制器和意見,如果我是正確的,這不是我的情況... – Gotjosh
@Gotjosh你可以提取你現有的模型進入引擎(這是最好的包裝成寶石)。然後將這個寶石包含到您的舊應用程序中,並且可以使用您的模型。您可以將寶石包含到您喜歡的任何其他應用程序中。不,引擎不會自動提供控制器。引擎可以提供Rails應用程序,模型,視圖,控制器,資產文件(JS,CSS)等的任何或所有部分。關於此的一本好書是JoséValim的「Crafting Rails應用程序」。 –
,你可以將其他項目模型文件夾添加到自動加載路徑中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
到共享文件夾的軟鏈接
我這樣做這一招是不實際使用Rails的技巧。我使用「git」技巧,並從第三個共享代碼倉庫中提取代碼。我將它作爲引擎放入這兩個應用程序中,並作爲外部git參考。
這是一個更多的工作,但是一旦你在一個應用程序中完成了一次,就很容易將它用作下一個應用程序的模板。
這並不意味着你必須在一個應用程序中將更改推送到Git,然後才能在其他應用程序中看到它們嗎?你將如何開發和測試新的東西? 「發動機」是什麼意思? – Chloe
你可以嘗試git submodule那個工作。
雖然Git子模塊很有用,但是一個限制是無法將子模塊部署到Heroku。 –
您可以更改這兩個API的代碼?還是有一些限制? –
@NigelThorne我當然可以,他們都是我自己造的。 – Gotjosh