Обновление Gem в Windows — оно сломано?

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

Когда я запускаю команду gem update в Windows, всякий раз, когда она попадает на драгоценный камень, последняя версия которого НЕ имеет двоичных файлов 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 г.): я только что обновился до gems 1.3.0, и эта проблема не устранена.

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

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


person Charles Roper    schedule 25.09.2008    source источник
comment
Вы имеете в виду 28 апреля 2009 года? Или вам нужен значок путешественника во времени?   -  person Andrew Grimm    schedule 24.08.2009
comment
Что делать, если я хочу установить новый гем, а при установке происходит сбой? В Gems 1.3.2 эта проблема решена??   -  person Jey Geethan    schedule 18.06.2010
comment
Да, эта проблема давно решена. На сегодняшний день у нас есть версия RubyGems 1.3.7.   -  person Charles Roper    schedule 21.06.2010


Ответы (4)


Самоцветы, начиная с версии 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 для каждого отдельного устаревшего драгоценного камня. Если один терпит неудачу, он просто переходит к следующему.

person Charles Roper    schedule 27.09.2008

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

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

gem install sqlite3-ruby --version '1.2.3'
person hectorsq    schedule 25.09.2008
comment
Да, это работает, и это то, что я сделал. Проблема в том, что когда вы впоследствии запускаете обновление драгоценного камня; он автоматически пытается обновиться до 1.2.4. - person Charles Roper; 28.09.2008

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

gem install sqlite3-ruby --platform=mswin32
person AMIC MING    schedule 22.09.2010
comment
этот мне помог. Спасибо - person Radek; 21.10.2010

Глядя на список файлов 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.

person Alan Hecht    schedule 01.10.2008