Обновление Gem на Windows - это сломано? - PullRequest
7 голосов
/ 25 сентября 2008

Это продолжение этого вопроса .

Когда я запускаю команду gem update в Windows, всякий раз, когда она gem, в последней версии которого нет бинарных файлов Windows, он попытается построить собственное расширение, которое, конечно же, потерпит неудачу. Например:

Updating sqlite3-ruby
Building native extensions.  This could take a while...
ERROR:  While executing gem ... (Gem::Installer::ExtensionBuildError)
  ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe extconf.rb update
checking for fdatasync() in rt.lib... no
checking for sqlite3.h... no

nmake
'nmake' is not recognized as an internal or external command,
operable program or batch file.

Старое поведение, предшествующее версии 1.x: запрашивать хотя бы требуемую платформу сделал возможным обновление. Теперь я не могу обновить вообще, если не удалю проблемные драгоценные камни (в настоящее время sqlite3-ruby и hpricot), запустите обновление, затем переустановите драгоценные камни с помощью ключа --version.

У кого-нибудь есть решение этой головоломки или мы застряли с ним?


Примечание:

$ gem -v
1.2.0

$ ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

Примечание (26 сентября 2008 г.): Я только что обновился до гемов 1.3.0, и эта проблема сохраняется.

Примечание (18 ноября 2008 г.): Только что обновлен до драгоценных камней 1.3.1, и проблема сохраняется.

Примечание (28 апреля 2009 г.): В последней версии Gems ( 1.3.2 ) теперь пропускаются все драгоценные камни, если во время обновления происходит сбой при создании собственных расширений; другими словами, проблема исправлена. Ура!

Ответы [ 4 ]

4 голосов
/ 28 сентября 2008

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

gem update --system

Следующее решение устарело, но я оставляю его здесь для записи.

Я создал тему по этому вопросу на форуме Ruby (это внешний интерфейс списка рассылки). Там есть интересная дискуссия; это стоит прочитать. Там есть даже очень хакерское решение этой проблемы:

`gem.bat outdated`.split(/\n/).map{|z|z.scan(/^[^[:space:]]+/)}.flatten.each{|z| `gem.bat update #{z}`}

Он вызывает команду gem outdated и создает список всех устаревших драгоценных камней. Затем он перебирает список и вызывает gem update для каждого отдельного устаревшего драгоценного камня. Если кто-то терпит неудачу, он просто переходит к следующему.

2 голосов
/ 22 сентября 2010

Выполните следующую команду, и она должна работать:

gem install sqlite3-ruby --platform=mswin32
2 голосов
/ 26 сентября 2008

Кажется, мы застряли. Я обнаружил здесь , что для последней версии (1.2.4) гем mswin32 не существует, я попытался установить его на свой компьютер и получил ту же проблему.

Установка предыдущей версии работает нормально:

gem install sqlite3-ruby --version '1.2.3'
1 голос
/ 01 октября 2008

Просмотр списка файлов RubyForge для sqlite3-ruby показывает, что версия 1.2.3 имеет гемы, созданные с использованием Visual Studio 6 и MinGW (sqlite3-ruby-1.2.3-mswin32.gem & sqlite3 -ruby-1.2.3-x86-mingw32.gem). Тем не менее, версия 1.2.4 не имеет таких готовых драгоценных камней.

Если у вас установлена ​​Visual Studio 6 или MinGW и установлены переменные среды компилятора (по крайней мере, для Visual Studio 6, но не уверены в MinGW), гем должен быть собран во время установки. Я не уверен, будут ли гемы собираться под более новые версии Visual Studio.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...