我正在使用Spring 应用程序预加载器,并且刚刚升级到 v 0.9.0。现在我收到以下警告:
警告:运行
gem pristine --all
以重新生成已安装的 gemspecs 将提高 Spring 的启动性能。
我尝试运行该命令,但它无法安装我的一些 gem,这可能与我最近升级到 OS X Mavericks 有关。我如何摆脱这个警告?
我正在使用Spring 应用程序预加载器,并且刚刚升级到 v 0.9.0。现在我收到以下警告:
警告:运行
gem pristine --all
以重新生成已安装的 gemspecs 将提高 Spring 的启动性能。
我尝试运行该命令,但它无法安装我的一些 gem,这可能与我最近升级到 OS X Mavericks 有关。我如何摆脱这个警告?
这是因为以前版本的 rubygems 会在查询时加载所有 gemspecs。
开始时这很慢,并且安装的 gem 越多越慢。
但是对于 Rubygems 2.1,它有一个“存根”的 gemspec,加载速度非常快。有关更多信息,请参阅https://github.com/rubygems/rubygems/pull/435。
spring 人利用这一点在加载 bin/spring 时不加载每一个 gemspec,它只使用一个小数字来调用 spring 服务器。
它正在做的测试(假设你有 RubyGems 2.1 或更高版本)基本上是:
ruby -e 'p Gem::Specification.stubs.reject(&:stubbed?).reject(&:default_gem?).map(&:name)'
如果该列表不为空,则它知道您有较旧的宝石;使用 RubyGems < 2.1 安装的 gem。
您可以使用该信息生成要运行的 gem 列表gem pristine
:
# /tmp/dirty.rb
require 'shellwords'
Gem::Specification.stubs.reject(&:stubbed?).reject(&:default_gem?).each do |gemspec|
puts "gem pristine #{Shellwords.escape gemspec.name} --version #{Shellwords.escape gemspec.version.to_s}"
end
然后运行:
ruby /tmp/dirty.rb | bash
但它更容易运行gem pristine --all
,正如@Beerlington 所提到的,gem uninstall
任何宝石都会给它带来问题。
我不完全理解问题的根源,但我能够通过删除无法安装的 gem 然后重新运行来摆脱警告gem pristine --all
。这可能不是一个大问题,但我想我会发布我的解决方案,以防其他人遇到同样的问题。