2017-06-14 77 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'的具體建議,可以將其包含在您的文章中 - 我會看一看。 –