介绍
我们有一个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