Windows 上の Gem アップデート - 壊れていますか?
質問
これは次のフォローアップです この質問.
を発行すると、 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スイッチを使用してgemsを再インストールしない限り、まったく更新できません。
この難題に対する解決策を持っている人はいますか? それとも私たちはこの難題に行き詰まっているのでしょうか?
注記:
$ gem -v
1.2.0
$ ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
注 (2008 年 9 月 26 日): gems 1.3.0 にアップデートしましたが、この問題は解決しません。
注 (2008 年 11 月 18 日): gems 1.3.1 にアップデートしたところ、問題が解決しません。
注 (2009 年 4 月 28 日): 最新バージョンの Gems (1.3.2) 更新中にネイティブ拡張機能の構築が失敗した場合、Gem がスキップされるようになりました。言い換えれば、問題は解決されました。万歳!
解決
現在の宝石 バージョン1.3.2, では、ビルドに失敗した gem がスキップされるようになりました。そのため、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 のリストを作成します。次に、リストを反復処理して呼び出します。 gem update
個々の時代遅れの宝石ごとに。1つが失敗しても、次のステップに進むだけです。
他のヒント
どうやら行き詰まってしまったようだ。見つけた ここ 最後のバージョン (1.2.4) には mswin32 gem がないので、コンピューターにインストールしようとしましたが、同じ問題が発生しました。
以前のバージョンをインストールすると正常に動作します。
gem install sqlite3-ruby --version '1.2.3'
以下のコマンドを実行すると機能するはずです。
gem install sqlite3-ruby --platform=mswin32
見てみると、 RubyForge ファイルリスト for sqlite3-ruby は、バージョン 1.2.3 に Visual Studio 6 と MinGW を使用してビルドされた gem (sqlite3-ruby-1.2.3-mswin32.gem および sqlite3-ruby-1.2.3-x86-mingw32.gem) があることを明らかにしています。ただし、バージョン 1.2.4 には、そのような事前に構築された gem がありません。
Visual Studio 6 または MinGW インストールされ、コンパイラ環境変数が設定されている場合 (少なくとも Visual Studio 6 の場合は、MinGW については不明)、インストール中に gem がビルドされるはずです。gem が新しいバージョンの Visual Studio でビルドされるかどうかはわかりません。