如何摆脱Spring警告:运行`gem pristine --all`?

时间:2013-11-01 11:48:05

标签: ruby-on-rails ruby

我正在使用Spring application preloader,只是升级到v 0.9.0。现在我收到以下警告:

  

警告:运行gem pristine --all重新生成已安装的gemspec将改善Spring的启动性能。

我尝试运行该命令,但无法安装我的一些宝石,这可能与我最近升级到OS X Mavericks有关。我如何摆脱这个警告?

2 个答案:

答案 0 :(得分:15)

这是因为以前版本的rubygems会在查询时加载所有gemspec。

开始时速度很慢,安装的宝石越多,速度越慢。

但是使用Rubygems 2.1,它有一个“存根”的gemspec,加载速度非常快。有关详细信息,请参阅https://github.com/rubygems/rubygems/pull/435

春天人们利用这个来加载每个gemspec时只需加载bin / spring,它只使用一小部分来调用弹簧服务器。

它正在进行的测试(假设你有RubyGems 2.1或更高版本)基本上是:

ruby -e 'p Gem::Specification.stubs.reject(&:stubbed?).reject(&:default_gem?).map(&:name)'

如果该列表不是空的,它就知道你有更老的宝石;安装RubyGems的宝石< 2.1。

您可以使用该信息生成运行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任何宝石都会给它带来问题。

答案 1 :(得分:5)

我并不完全理解source of the issue,但我能够通过删除未能安装的宝石然后重新运行gem pristine --all来消除警告。这可能不是一个大问题,但我想我会发布我的解决方案以防其他人遇到同样的问题。