如何告诉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