Ответ 1
Это связано с тем, что предыдущие версии rubygems загружали все gemspecs всякий раз, когда запрашивались.
Это медленное начало и медленнее, чем больше камней установлены.
Но с Rubygems 2.1 у него есть "закодированный" gemspec, который очень быстро загружается. Подробнее см. https://github.com/rubygems/rubygems/pull/435.
Люди spring используют это, чтобы не загружать каждый отдельный gemspec при загрузке bin/ spring, который использует только небольшое число, чтобы вызывать сервер spring.
Тест, который он выполнял (если у вас есть RubyGems 2.1 или новее), по существу:
ruby -e 'p Gem::Specification.stubs.reject(&:stubbed?).reject(&:default_gem?).map(&:name)'
Если этот список не был пустым, он знал, что у вас есть более старые драгоценные камни; драгоценные камни, установленные с помощью RubyGems < 2.1.
Вы можете использовать эту информацию для создания списка драгоценных камней для запуска gem pristine
on:
# /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
любые драгоценные камни, дающие ему проблему.