如何摆脱春季警告:运行“宝石原始 - 所有”



我正在使用Spring应用程序预加载器,刚刚升级到v 0.9.0。现在我收到以下警告:

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

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

这是因为以前版本的红宝石会在查询时加载所有宝石规格。

这开始时很慢,并且安装的 gem 越多,速度就越慢。

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

弹簧

人利用这一点,在加载垃圾箱/弹簧时不加载每个宝石规格,它只使用少量来调用弹簧服务器。

它所做的测试(假设你有RubyGems 2.1或更高版本)基本上是:

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

如果该列表不为空,则它知道您有较旧的 gem;使用 RubyGems <2.1 安装的 Gem。

您可以使用该信息生成要在其上运行gem pristine的 Gem 列表:

# /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来摆脱警告。这可能不是一个大问题,但我想我会发布我的解决方案,以防其他人遇到同样的问题。

相关内容

最新更新