2014-01-23 50 views
2

我從來沒有這樣做過,不知道從哪裏開始。我有兩個應用程序,一個讀取,另一個讀取/寫入。我被告知,我可以在兩個應用程序之間共享相同的數據庫,並且我應該從讀/寫應用程序創建我的模型的寶石,以用於我的只讀應用程序。爲兩個應用程序之間共享的模型創建Gem

這聽起來像是一個很好的解決方案,因爲它意味着我不必在兩個應用程序之間複製我的代碼。從哪裏開始呢?如果有人可以騰出時間,我會非常感激一個解釋和一些指導,說明如何在這裏做什麼,如果可能的話,幾乎是一個迷你的指導?或者至少在某個地方看?

所以已經做了一些更多的閱讀中,我可以看到,您可以使用捆綁來創建一個寶石

bundle gem name-of-my-gem 

,我可以使用寶石像這樣,通過將其放置在每一個應用程序

gem "name-of-my-gem", path: "path/to/gem/dir" 

我怎麼實際上告訴它我想把哪個模型放入寶石中?

任何幫助表示讚賞,並道歉,如果這是有點基本的,但我從來沒有這樣做過

+0

我不明白爲什麼模型外殼放入寶石? –

+0

所以我不必在每個應用程序中創建所有模型,如果這是一個不好的做法,那麼請建議您的方法,但是我希望看到這一點,並創建與模型的寶石,如果不僅僅是爲了學習的東西:) – Richlewis

+0

你已經將模型存儲在寶石中,對嗎?你必須改變它的代碼?如果是的話,你爲什麼說*放入寶石*,因爲我想到了一個數據。 –

回答

2

如何構造的寶石是相當多給你,但這裏是我會怎麼開始:

name-of-my-gem/ 
.. lib/ 
.... name-of-my-gem.rb 
.... models/ 
...... all_of_your_models 

您的模型寶石應該有一個.rb文件加載存儲在其中的任何模型。如果此文件以gem命名並放在gem的lib/目錄中,則它應該由bundler自動加載。該文件可能是這個樣子:

require "models/customer" 
require "models/order" 
# ... 

你也可以做一些票友在這裏,像搶在車型目錄的文件列表,並加載每個人,所以你不必每款新車型加入到這個文件。由你決定。

每個models/文件看起來完全一樣在你的Rails應用程序的模型:

class Customer < ActiveRecord::Base 
    has_many :orders 
    # ... 
end 

可以在他們目前居住在Rails應用程序和粘貼複製你想要分享的任何模型類出app/models/他們分成models/在你的寶石。然後,您只需更新每個應用程序中的gem(每個應用程序都運行bundle update name-of-my-gem),並且您應該能夠從app/models/中取出該模型,並且它應該仍然可以工作,因爲它將從您的gem中加載。

這種方法的一個缺點是導軌無法在更改後重新加載模型。在寶石中更改模型後,您需要運行bundle update name-of-my-gem,然後重新啓動Rails服務器。我建議在一個應用程序中首先充分利用模型的大部分功能,以便利用rails代碼重新加載,以及在其相當穩定的情況下將其移植到gem中。

你也可以給你的寶石代碼重新加載的權力,但這變得相當複雜,我從來沒有這樣做。

+0

非常感謝你,這是有道理的,所以即時採取我的模型的副本,並將其放入寶石(一旦他們最終確定會做)...可能是一個愚蠢的問題,但我從哪裏創建寶石?在應用程序之外還是在我的讀/寫(app1)之內?順便提一下,您已經得到了很大的幫助 – Richlewis

+0

您在應用程序之外創建了gem。實質上你的模型成爲他們自己的圖書館。我當然會建議把你的寶石保存在一個git倉庫中。然後,您可以將每個應用程序的'Gemfile'指向git repo,而不是本地路徑gem:'gem「name-of-my-gem」,git:「[email protected]:user/repo.git」' –

+1

非常有意義......你剛剛清理了很多,我創造了寶石,如果我可以給你更多的積分,我會...非常感謝你 – Richlewis

相關問題