【问题标题】:Bundler and bundler-only - suppress duplicate gem warningBundler 和 bundler-only - 禁止重复 gem 警告
【发布时间】:2017-06-14 08:04:30
【问题描述】:

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

所以在我的部署机器上,我使用 bundle-only,它只会安装命名空间在 deploy 组下的 gem。

但是,正因为如此,我需要复制一些 gem(例如,我的部署需要向 slack 发送通知,所以我的全局命名空间和 :deploy-only 命名空间中都有一些通知程序 gem。 这会导致几个警告

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

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

【问题讨论】:

    标签: ruby-on-rails ruby rubygems gemfile


    【解决方案1】:

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

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

    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

    【讨论】:

    • 警告不知道 bundle-only gem 仅用于安装给定命名空间下列出的 gem。
    • 这不是重点。您仍然没有必要多次列出宝石。这样做违反了 bundler 的指导方针(因此有上面的警告),the bundle-only README 也不建议这样做。通过两次列出slack-notifier gem,您正在制造未来版本冲突的不必要风险 - 例如运行标准bundle install 命令时。
    • 如果您想了解有关如何构建整个 Gemfile 的更具体建议,您可以将其包含在您的帖子中 - 我会看看。
    【解决方案2】:

    另一种方法是维护所有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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 2013-05-02
      • 2023-04-02
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多