Как получить список установленных драгоценных камней с собственными расширениями? - PullRequest
12 голосов
/ 02 марта 2011

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

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

Ответы [ 5 ]

7 голосов
/ 02 марта 2011

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

Обновление: вот короткий скрипт ruby ​​для перечисления этих драгоценных камней:

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
5 голосов
/ 27 октября 2012

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

gem pristine --all

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

4 голосов
/ 30 декабря 2013

На основе этого ответа , вот решение, которое находит и предлагает переустановить драгоценные камни с собственными расширениями , которое работает с последними рубинами (> = 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)
…
0 голосов
/ 20 июня 2013

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

0 голосов
/ 03 марта 2011

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

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

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

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

...