2017-03-24 123 views
0

比方说,我有2个代码库/ git回购。 project A and gem B在heroku rails中强制捆绑更新

项目中使用的宝石B.

这里是在项目中Gemfile中的条目。

gem 'B', git: 'https://yashdfjwehrlhkhklbRrKwgNq:[email protected]/pwa-abcde/B.git', branch: 'dev/B-api'

现在今天我做了一些修改,以gem B,并推动它与git。

但是project A永远不会获得此更新,因为它已经在使用旧版本的gem。

我的主项目(A)托管在heroku中。

现在我的疑问是,我该如何强制heroku获取宝石的最新变化?

回答

2

你可以实现它以下两种方式:

  1. 设置ref代表在您的Gemfile提交哈希,而不是branch名称和运行捆绑安装。现在,当你再次推送到heroku时,它将获取正确的提交。

    gem 'B', git: 'https://yashdfjwehrlhkhklbRrKwgNq:[email protected]/pwa-abcde/B.git', ref: 'commmit-hash' 
    
  2. 您提交的gem B变化,并设置新的分支创建新的分支。

发生这种情况是因为您没有pusdev/B-apih Gemfile中的任何更改。如果GemfileGemfile.lock中有任何更改,则Heroku运行bundle install

+0

声音合乎逻辑,我会尝试相同的。所以每当我们修改gem中的某些东西时,我们需要在我们的项目gemfile中提供提交散列? –

+0

似乎工作正常。但生产环境的最佳实践是什么?每次我们做出一些更改时,我们是否需要提交提交散列? –

+0

因此我们并没有在gem中做出更改,所以最好生成分支并设置头部。如果宝石是你自己的,那么你可以每次创建新的版本。 –

0

而不是在Heroku运行bundle updateProject A在本地运行bundle update本地第一。这会更新您的Gemfile.lock。测试Project A是否仍按预期在本地运行。
然后提交并将新的Gemfile.lock推送到Heroku。

+0

已经尝试过,它不会工作,因为它将使用现有的gem,而不是从git中获取新版本。 –

+0

如果''Gemfile.lock'是从Windows系统生成的,它就会工作。没关系,我已经重写了我认为是解决这种情况的更好方法的答案。 – ashmaroli