部品 Windows上の宝石のアップデートは壊れていますか?




部品 が 壊れ た 英語 (4)

これはこの質問のフォローアップです。

私がWindows上でgem updateコマンドを発行すると、最新のバージョンに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]

注(2008年9月26日):私は宝石1.3.0にアップデートしたばかりで、この問題は解決しません。

注(2008年11月18日):宝石1.3.1に更新されただけで問題は解決しません。

注記(2009年4月28日): Gems( 1.3.2 )の最新バージョンは、アップデート中にネイティブ拡張の構築に失敗した宝石をスキップします。 つまり、問題は解決されています。 やめ!


RubyForgeのsqlite3-ruby ファイルリストを見ると、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についてはわかりませんが)、インストール中にgemがビルドされます。 宝石が新しいバージョンのVisual Studioでビルドされるかどうかはわかりません。


私たちは立ち往生しているようです。 私は最後のバージョン(1.2.4)のためのmswin32の宝石がないことをここで見つけまし 、私は私のコンピュータにそれをインストールしようとし、同じ問題を抱えました。

以前のバージョンをインストールするとうまくいきます:

gem install sqlite3-ruby --version '1.2.3'

以下のコマンドを実行すると動作します:

gem install sqlite3-ruby --platform=mswin32

バージョン1.3.2以降のGemsはビルドに失敗した宝石をスキップするので、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 outdatedすべての宝石のリストを作成します。 その後、リストを反復処理して、古い個々の宝石についてgem updateを呼び出します。 1つが失敗すると、次のものに移動するだけです。





rubygems