仅针对选定的宝石进行捆绑部署

时间:2016-03-17 12:20:23

标签: rubygems bundler

我想仅为一组系统未提供的宝石运行bundle --deployment。我已尝试使用--with=group,但它已开始为Gemfile

中的所有宝石执行操作

1 个答案:

答案 0 :(得分:1)

Bundler的--with选项与您期望的有所不同。我们首先查看--without--with选项的bundle install手册页:

  

--without=<list>

     

以空格分隔的引用gems的组列表   在安装过程中跳过如果给出了一个组中的组   记住给予的组列表 - 用它,从中删除   名单。这是remembered option

     

--with=<list>

     

以空格分隔的组列表,引用要安装的gem。如果给出了可选组,则会安装该组。如果是一个团体   鉴于这是在被记住的群组列表中给出 - 没有,它   从该列表中删除。这是remembered option

请务必注意--with 只是--without的倒数(尽管--with 取消以前记住的--without组,反之亦然),它支持完全不同的功能(最近一次implemented,大约在2015年中期),(#向后兼容)概念&#34 ;可选组&#34;,仅适用于明确标有optional => true参数的组。

重要的是,--with实施从默认组或--without未指定的任何其他组中排除gems。

因此,您有两种方法可以将安装限制为一组宝石:

  1. 白名单使用--with将所有群组标记为&#34;可选群组&#34; (使用:optional => true参数)并将您要安装的组传递给--with,并排除所有其他可选组。
  2. 使用--without的黑名单,将您不希望安装的所有群组传递给--without
  3. 不幸的是,这两个选项都无法阻止&#34;默认组中的宝石&#34; (未明确分配给某个组的宝石),因此您必须将您想要的所有宝石放置在某个组中。

    以下Gemfile示例应该有助于澄清:

    gem "rack" # Always installed; impossible to exclude
    
    group :group, :optional => true do
      gem "thin" # Not installed by default; install using --with=group
    end
    group :another_group, :optional => true do
      gem "wirble" # Not installed by default; install using --with=another_group
    end
    group :third_group do
      gem "activesupport", "2.3.5" # Installed by default; exclude using --without=third_group
    end