2017-06-14 70 views
1

我在我的gemfile上使用bundler来执行应用程序,发现使用bundler-only只能选择仅部署所需的部分gem。Bundler和bundler-only - 禁止重复的gem警告

所以在我的部署机器上,我使用bundle-only,它只能在deploy组中安装gem命名空间。因为这个,我需要复制一些gem(例如,我的部署需要发送一个通知给slack,所以我在全局命名空间和我的:deploy-only命名空间都有一些notifier gems。 这个原因几个警告

你的Gemfile列出了宝石松弛通知(> = 0)一次以上。你 或许应该只保留其中的一个。虽然现在不是一个问题, 如果你改变它可能会导致错误其中一个的版本后面

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

回答

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 
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

+0

警告不知道'捆只有'gem,它只用于安装列在给定名称空间下的gem。 –

+0

这是除了点。您仍然不需要多次列出宝石。这样做违反了打包程序的指导原则(因此上述警告),也不推荐在[仅捆绑软件的自述文件](https://github.com/MOZGIII/bundle-only)中。通过两次列出'slack-notifier' gem,您将为未来的版本冲突创造不必要的风险 - 例如当运行一个标准的'bundle install'命令时。 –

+0

如果您想了解更多关于如何构建整个'Gemfile'的具体建议,可以将其包含在您的文章中 - 我会看一看。 –