2017-05-31 86 views
0

我們正在研究構建一個非常大的導軌應用程序,並考慮使用引擎更好地將「模塊」分離出主應用程序。構建作爲寶石的導軌引擎的工作流程

我們已經通過創建一個使用寶馬motorhead的小型引擎(想要它的active_if組件的想法)來開始這個過程。 該引擎然後從主應用程序中刪除,並給了一個git init,然後推送到github。

主應用程序然後能夠在Gemfile內拉出寶石。

在這個概念驗證過程中,它可以工作,但效率不高,而且以這種方式更新新引擎/寶石有點尷尬,因爲它有點像一個子模塊。構建像這樣的模塊化應用程序時,構建和維護引擎/寶石的正確工作流程是什麼?

預先感謝

+0

你可以把你的引擎寶石嵌入你的主要Rails應用程序;例如,在'app/engines'或'lib/engines'下;然後使用你的Gemfile從相對路徑直接加載gem(使用'path:'選項)。這將所有內容都保存在一個存儲庫中,但在邏輯上完全分離,並且您可以根據需要選擇將每個引擎完全提取爲真正的寶石。 –

+0

感謝羅伯特,是的,我們嘗試了兩種選擇。主要問題是,如果我們想讓它們完全分離寶石,那麼如何繼續發展它們呢?即他們目前沒有gemfile等,不能單獨通過rails服務器啓動。此外,當對寶石進行更改(再開發它時),主應用程序需要重新啓動或寶石彈簧 – Rockman

+0

您的評論是單塊而不是SOA的論點。 DHH的位置:https://m.signalvnoise.com/the-majestic-monolith-29166d022228 – toddmetheny

回答

0

最akward的部分有關部署寶石或發動機作爲模塊是不斷需要更新。我們有很多成功的使用:

bundle config local.my_gem ~/projects/my_gem/

它會指向寶石/引擎版本在磁盤上,而無需修改Gemfile中和Gemfile.lock的。

要刪除本地重載run:

bundle config --delete local.my_gem ~/projects/my_gem/

有了這個,你應該能夠限制Gemfile.lock的必須更新到部署的時間的時間。