Подтвердить что ты не робот

Как получить список установленных камней, имеющих собственные расширения?

Я нахожусь в окнах и обновляюсь с ruby ​​1.8.x до 1.9.x, и теперь вы получаете всплывающие окна с ошибкой, которые жалуются на ruby-mssomethingrt.1.8.x.dll.

Я хотел бы узнать, какие у камней есть собственные расширения, поэтому я могу их удалить и принудительно перенастроить собственные расширения во время установки снова, чтобы ошибка исчезла.

4b9b3361

Ответ 1

Хорошим началом было бы посмотреть спецификацию драгоценного камня для каждого драгоценного камня и посмотреть, есть ли в нем поле extensions. Это должно оставить вас с кратким списком драгоценных камней для повторной установки. Они не обязательно используют собственные расширения, но если вы посмотрите на соответствующие файлы extconf.rb, это должно быть довольно легко узнать.

Обновление: вот краткий рубин script, чтобы перечислить эти драгоценные камни:

require 'rubygems'

Gem.source_index.each do |gem|
  spec =  Gem.source_index.specification(gem[0])
  ext = spec.extensions
  puts "#{gem[0]} has extensions: #{ext}" unless ext.empty?
end

Ответ 2

Вы можете восстановить (и восстановить первоначальное состояние) все установленные камни с помощью:

gem pristine --all

--all --no-extensions будет восстанавливать драгоценные камни без расширений, но, несмотря на документирование, --extensions оказывается неэффективным (по крайней мере, на rubygems 1.8.23 на Ubuntu 12.10).

Ответ 3

Основываясь на этом ответе, вот решение, которое находит и предлагает переустановить драгоценные камни с родными расширениями , которые работают с недавними рубинами ( >= 1.9).

native_gems = []
Gem::Specification.each do |spec|
  native_gems << "#{spec.name}:#{spec.version}" unless spec.extensions.empty?
end

install_cmd = "gem install #{native_gems.join ' '}"
puts "Found #{native_gems.length} gem(s) with native extensions:"
puts "\n> " + install_cmd, "\nReinstall gems with above command? (yn)"

exec insall_cmd if gets.downcase[0] == 'y'

Результат:

Found 36 gem(s) with native extensions:

> gem install atomic:1.1.13 bcrypt-ruby:3.0.1 bigdecimal:1.2.0 eventmachine:1.0.3 eventmachine:1.0.0 eventmachine:0.12.10 ffi:1.9.3 ffi:1.9.0 ffi:1.7.0 hiredis:0.4.5 hpricot:0.8.6 io-console:0.4.2 json:1.8.1 json:1.8.0 json:1.7.6 nokogiri:1.6.0 nokogiri:1.5.9 pg:0.17.1 pg:0.17.0 pg:0.16.0 pg:0.15.1 pg:0.13.2 psych:2.0.0 puma:2.7.1 puma:2.6.0 puma:2.4.0 puma:1.6.3 sqlite3:1.3.8 sqlite3:1.3.7 sqlite3:1.3.5 therubyracer:0.12.0 thin:1.5.1 thin:1.5.0 thin:1.4.1 websocket-driver:0.2.3 websocket-driver:0.1.0

Reinstall gems with above command? (yn)
…

Ответ 4

список драгоценных камней

часть после версии рядом с драгоценным камнем должна указывать, работает ли ее собственный код: например json (1.4.6 x86-mingw32)

Ошибка, которую вы видите, заключается в том, что один из используемых вами драгоценных камней ожидает, что интерпретатор 1.8 рубина будет присутствовать, который больше не существует (поскольку вы обновили до 1.9).

Я бы подумал, что только запуск "gem update" поможет решить вашу проблему. Если это не так, вам может потребоваться найти альтернативный камень для того, кто ожидает перевода интерпретатора ruby ​​1.8.

Ответ 5

В Cygwin вы можете попробовать gem list --all -d | grep --before-context=1 --after-context=4 Platform.