[ruby-list:48989] 1234567890 gemについて

From: masa <masap.hat@...>
Date: 2012-11-01 13:59:23 UTC
List: ruby-list #48989
Quineが好きな畠山です。

先日遠藤さんの1234567890(gem)のインストール(ruby-1.9.3p286, Mac OS X
10.6.8)に失敗して、その後Rubyソースをコンパイルする毎に以下のエラーが出るようになってしまいました(trunkでなくても、最新1.9.3安定板でも同様です)。

/Users/masa/Desktop/test/ruby-trunk-37407/lib/rubygems/specification.rb:287:in
`block in _resort!': undefined method `nonzero?' for nil:NilClass
(NoMethodError)
	from /Users/masa/Desktop/test/ruby-trunk-37407/lib/rubygems/specification.rb:284:in
`sort!'
	from /Users/masa/Desktop/test/ruby-trunk-37407/lib/rubygems/specification.rb:284:in
`_resort!'
	from /Users/masa/Desktop/test/ruby-trunk-37407/lib/rubygems/specification.rb:278:in
`_all'
	from /Users/masa/Desktop/test/ruby-trunk-37407/lib/rubygems/specification.rb:411:in
`each'
	from /Users/masa/Desktop/test/ruby-trunk-37407/lib/rubygems.rb:483:in `map'
	from /Users/masa/Desktop/test/ruby-trunk-37407/lib/rubygems.rb:483:in
`find_files'
	from /Users/masa/Desktop/test/ruby-trunk-37407/lib/rdoc/rdoc.rb:503:in
`<top (required)>'
	from ./bin/rdoc:18:in `require'
	from ./bin/rdoc:18:in `<main>'

ソースコード中のlib/rubygems/specification.rbのL287の

def self._resort!
    @@all.sort! { |a, b|
      names = a.name <=> b.name
      next names if names.nonzero?

を

def self._resort!
    @@all.sort! { |a, b|
      names = a.name <=> b.name
      next names if names and names.nonzero?

とでもすれば、とりあえずmakeできますが、毎度これをするのは面倒なので、どなたか解決方法をご存じないでしょうか。
たぶんどこかにインストールしたgemの名前情報がシステムのどこかに保存されているせいだと推測しているのですが。以下のようにデバッグプリントすると

      print "a.name = ", a.name, " b.name = ", b.name, "\n"

      a.name = 1234567890 b.name = kramdown

というように出るので確かに1234567890が原因だとは思います(ちなみにkramdownはインストールされているgemの一つです)。ちなみにgem
listとしても1234567890は出力されません。なのでgem uninstallもできません。

どうぞよろしくお願いします。
畠山

In This Thread

Prev Next