我正在使用Spring application preloader並剛剛升級到v 0.9.0。現在我收到以下警告:如何擺脫春季警告:運行`gem pristine --all`?
警告:運行
gem pristine --all
重新生成您安裝的gemspecs將提高Spring的啓動性能。
我試着運行那個命令,但是它無法安裝我的一些寶石,這可能與我最近升級到OS X Mavericks有關。我如何擺脫這個警告?
我正在使用Spring application preloader並剛剛升級到v 0.9.0。現在我收到以下警告:如何擺脫春季警告:運行`gem pristine --all`?
警告:運行
gem pristine --all
重新生成您安裝的gemspecs將提高Spring的啓動性能。
我試着運行那個命令,但是它無法安裝我的一些寶石,這可能與我最近升級到OS X Mavericks有關。我如何擺脫這個警告?
這是因爲以前版本的rubygems會在每次查詢時加載所有gemspecs。
這是開始緩慢,越慢安裝的寶石越多。
但與Rubygems 2.1它有一個「stubbed」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
任何寶石給它一個問題。
我不完全理解source of the issue,但我能夠通過刪除未能安裝的寶石,然後重新運行gem pristine --all
來擺脫警告。這可能不是一個大問題,但我想我會發布我的解決方案,以防其他人遇到同樣的問題。
雖然這並不能完全解決我在Ubuntu 14.04上遇到的問題,但它使我轉向了https://github.com/rails/spring/issues/320#issuecomment-252131401,這表明Ubuntu/Debian使用的軟件包'default_gem?'的行爲。 – ajsharma