Bundler和bundler-only - 禁止重复的gem警告

时间:2017-06-14 08:04:31

标签: ruby-on-rails ruby rubygems gemfile

我在gemfile上使用bundler来执行应用程序,并发现使用bundler-only只能选择部署所需的宝石子集很方便。

因此,在我的部署计算机上,我使用bundle-only只会在deploy组下安装名为namespace的gems。

然而,因为这个我需要复制一些gem(例如我的部署需要向slack发送通知,所以我在我的全局命名空间和my:deploy-only命名空间中都有一些notifier gem。 这导致了几个警告

  

你的Gemfile不止一次列出了gem slack-notifier(> = 0)。您   应该只保留其中一个。虽然现在不是问题,   如果您稍后更改其中一个版本,可能会导致错误

有没有办法抑制警告? (如果可能的话,只有那些宝石)

2 个答案:

答案 0 :(得分:1)

不要多次列出宝石。那个警告是有充分理由的。

您可以在Gemfile内一次将多个名称空间下的宝石分组,如下所示:

group :deploy, :somethingelse do
  gem 'slack-notifier'
end

group :deploy do
  # Deploy-ONLY gems
end

group :somethingelse
  # Somethingelse-ONLY gems
end

或者,如果您愿意,可以进行内联分组:

gem 'slack-notifier', group: [:deploy, :somethingelse]

有关更多信息,请阅读Gemfile组上的bundler documentation

答案 1 :(得分:0)

另一种方法是维护所有groups的列表,并系统地包含, groups: groups

# Gemfile
groups = [:deploy, :x, :y, :z, ...] # Maintain this list as you add groups

# Gems needed except in deploy
gem :a
gem :b
...

# Gems that are also required for deploy
gem :d1, groups: groups
gem :d2, groups: groups

# Gems that are required ONLY in deploy

group :deploy do 
  gem :dep_only1
  gem :dep_only2
end

所以以下工作没有警告

bundle --without deploy # Will ignore deploy group
bundle-only deploy # Will install only deploy gems including those that are also needed by the app