如何告诉bundler忽略不存在的gem?

我的组织有许多内部gem,用于自动化测试,但不是生产部署所必需的。 我正在尝试使用Bundler,因此在我的Gemfile中我将这些gem包装在:

group :test, :development do gem 'dashboard_summary' end 

但是,当我跑:

 $ bundle install --without staging development test 

我还是得到了

 Could not find gem 'dashboard_summary (>= 0) ruby' in the gems available on this machine. 

我试图理解为什么Bundler在我告诉它的时候并没有忽略那个gem。

这是预期的行为。 来自文档 :

虽然--without选项将跳过在指定组中安装 gem,但它仍然会下载这些gem并使用它们来解析Gemfile(5)中每个gem的依赖关系。

虽然最新的Gemfile.lock可能表明不需要再次解析依赖关系,但看起来即使在这种情况下也会下载所有gem。

我不确定你为什么要在那里staging ? 但这应该有效

  bundle install --without test development 

您还可以在bundle config中设置BUNDLE_WITHOUT中记录的配置环境变量。

你可以用

 gem 'dashboard_summary', require: false 

这不会在启动时加载gem,当你想使用gem时你必须要求它。 如果由于依赖性而需要在您的Gemfile中保留dashboard_summary ,这可能会有所帮助,但是节省了加载所需的时间,而不是获得您现在获得的错误。 这至少要尝试一下。

您没有定义任何包含登台,开发和测试的组。 您的小组只进行了测试和开发。

Bundler试图忽略其中包含全部三个名称的组,因此您可以添加分段

 group :test, :development, :staging do gem 'dashboard_summary' end 

或者你可以使用

  $ bundle install --without test development