介紹
我們有一個Rails5應用程序,這是在約10+發動機splittend和核心應用,其安裝這些引擎。如何處理Gemfile.lock與本地寶石資源庫?
在我們的例子中,引擎是一個簡單的舊的rails引擎,被定義爲gem並位於專用的git存儲庫中。核心應用程序中的Gemfile
指的是所有引擎(見下文)。
要求的行爲
- 對於部署寶石/引擎的特定版本應該使用(由核心)。
- 對於本地開發,本地克隆存儲庫的
HEAD
應該被使用(由核心)。
當前設置
我們實現了通過執行以下步驟在覈心應用程序的每個引擎:
- 添加
gem 'nice_engine1', '~> 0.0.1', branch: :develop, git: '[...]', tag: 'v0.0.1'
- 設置一個捆綁的配置項:
bundle config local.nice_engine1 ../nice_engine1
這似乎工作,但我們沒有嘗試運行部署尚未安裝。
問題與安裝
每次存儲庫中的一個局部更新,我們運行的核心bundle install
,捆綁更新Gemfile.lock
新HEAD
裁判本地引擎存儲庫。我們曾經承諾改變Gemfile.lock
。
不幸的是這是否會導致一些問題:
- 如果有人更新了核心應用程序,而不更新引擎,它可能發生,即核心
Gemfile.lock
指的是git的承諾發動機,這不在當地存在。如果試圖使用rails應用程序,那會導致錯誤。 - 在部署時(我認爲)
Gemfile.lock
可能引用一個提交id,這是更新的,然後提交我想要部署的標記/版本。我不確定在這種情況下會發生什麼,但我擔心,這隻會導致我們陷入困境。 - 我們在更改
Gemfile.lock
的核心中有很多提交(可能針對其中一個引擎的每個更改)。 - 使用其他引擎分支機構本地然後
master
迫使開發商在主應用程序來改變分支名Gemfile
問題
什麼是管理Gemfile
並在Gemfile.lock
正確的/最佳途徑避免這些問題的給定情況?
有關最佳實踐和改進建議等的一些提示,如何使用bundler和git來滿足我們的要求,我會很感激。
'Gemfile'仍然是一個普通的老紅寶石。我會爲所有的子引擎(pleudocode)添加'\'git fetch \'如果Rails.dev?' – mudasobwa
這聽起來像一個非常複雜的設置。我看到的一個問題是,人們將會針對與生產中不同的提交哈希進行開發,因此很難確定您正在處理的內容是否與實時內容以及在什麼情況下兼容。我可能會嘗試對gem進行版本升級,並將它們從開發模式分開升級爲不同的提交。 – lobati
增加了另一個問題(引擎分支)。 – phortx