【发布时间】:2016-03-17 12:20:23
【问题描述】:
我只想为一组系统未提供的 gem 运行 bundle --deployment。我尝试过使用--with=group,但它开始对Gemfile 中的所有宝石进行处理
【问题讨论】:
我只想为一组系统未提供的 gem 运行 bundle --deployment。我尝试过使用--with=group,但它开始对Gemfile 中的所有宝石进行处理
【问题讨论】:
Bundler 的--with 选项的作用与您的预期有些不同。让我们先看看bundle install 手册页中的--without 和--with 选项:
--without=<list>引用 gem 的组的空格分隔列表 安装过程中跳过。如果给定一个组,它在 记住的组列表给--with,它会从那个列表中删除 列表。这是remembered option。
--with=<list>引用要安装的 gem 的组的空格分隔列表。如果给定了可选组,则会安装它。如果一个组是 鉴于这是在给--without的组的记住列表中,它 从该列表中删除。这是remembered option。
重要的是要注意--with 不只是--without 的倒数(尽管--with 组确实取消了以前记住的@ 987654335@ 组,反之亦然),它支持一个完全不同的功能(一个 implemented 最近,大约在 2015 年年中),“可选组”的(向后兼容)概念,它仅适用于明确标记为的组optional => true 参数。
重要的是,--with 实现确实不将 gem 从默认组或 --without 未指定的任何其他组中排除。
因此,您有两个选项可将安装限制为仅一组 gem:
--with 将所有组标记为“可选组”(使用:optional => true 参数)并将您希望安装的组传递给--with,从而将所有其他可选组排除在外,从而将所有组加入白名单。--without,使用--without 将其列入黑名单。不幸的是,这两个选项都无法阻止安装“默认组”(未明确分配给组的 gem)中的 gem,因此您必须将所有您想要排除的 gem 放在某个组中。
以下 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
【讨论】:
with 或without 选项的旁注,必须使用: 作为分隔符,如下所示:bundle --path vendor/bundle --without runtime:cucumber:vendor:production:development