ruby_inline における誤解と脱線の記録。
$ ruby -d inline_sample.rb Exception `LoadError' at /usr/local/lib/site_ruby/1.8/rubygems.rb:1106 - no such file to load -- rubygems/defaults/operating_system
$ gem -v 1.3.3 $ which gem /usr/bin/gem $ which gem1.8 /usr/bin/gem1.8 $ gem1.8 -v 1.3.3
gems をバージョンアップしてみた。
$ sudo gem install rubygems-update-1.3.5.gem [sudo] password for nishi: Successfully installed rubygems-update-1.3.5 1 gem installed Installing ri documentation for rubygems-update-1.3.5... $ which update_rubygems /usr/bin/update_rubygems $ sudo update_rubygems Installing RubyGems 1.3.5 RubyGems 1.3.5 installed .... RubyGems installed the following executables: /usr/bin/gem1.8 $ gem1.8 -v 1.3.5 $ gem -v 1.3.5
$ ruby -d inline_sample.rb Exception `LoadError' at /usr/local/lib/site_ruby/1.8/rubygems.rb:1113 - no such file to load -- rubygems/defaults/operating_system
ためしに touch してみる。
$ sudo mkdir /usr/local/lib/site_ruby/1.8/rubygems/defaults $ sudo touch /usr/local/lib/site_ruby/1.8/rubygems/defaults/operating_system.rb $ ruby -d inline_sample.rb Exception `NoMethodError' at /usr/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational Exception `LoadError' at /usr/local/lib/site_ruby/1.8/rubygems/config_file.rb:34 - no such file to load -- Win32API Exception `LoadError' at /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31 - no such file to load -- inline RubyInline v 3.8.2 Exception `LoadError' at /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31 - no such file to load -- inline/Inline_Test_dc80.so Exception `LoadError' at /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:38 - no such file to load -- inline/Inline_Test_dc80.so /home/nishi/.ruby_inline/Inline_Test_dc80.so is up to date Exception `NoMethodError' at inline_sample.rb:32 - undefined method `plus_inline' for #<Test:0xb7cee804> inline_sample.rb:32: undefined method `plus_inline' for #<Test:0xb7cee804> (NoMethodError)
test.rb で確認。
#!/usr/bin/ruby require "rubygems"
$ ruby -d test.rb Exception `LoadError' at /usr/local/lib/site_ruby/1.8/rubygems.rb:1113 - no such file to load -- rubygems/defaults/operating_system Exception `NoMethodError' at /usr/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational Exception `LoadError' at /usr/local/lib/site_ruby/1.8/rubygems/config_file.rb:34 - no such file to load -- Win32API
そもそも -d はデバッグオプションなのだが、-d で上記のエラーを出すことは別に異常ではないらしい。
/etc/alternatives によって gem1.8 を参照するように指定されている。
rubygems1.9 をインストールした場合にはこの仕組みで切り替えることになる?
以下、Ubuntu Linux 9.04 にて。
$ gem -v 1.3.1 $ ls -l /usr/bin/gem lrwxrwxrwx 1 root root 21 2008-12-26 23:21 /usr/bin/gem -> /etc/alternatives/gem* $ ls -l /etc/alternatives/gem lrwxrwxrwx 1 root root 15 2009-04-30 16:44 /etc/alternatives/gem -> /usr/bin/gem1.8* $ ls -l /usr/bin/gem1.8 -rwxr-xr-x 1 root root 785 2009-03-25 22:56 /usr/bin/gem1.8*
Ubuntu 版の gem は /var/lib/gems/1.8 にパッケージを入れるが、 オリジナルの rubygems の挙動に従いたい。
ディストリビューションのアップグレードの影響を受けないようにしたい。
$ sudo apt-get remove rubygems1.8 $ tar xvfz rubygems-1.3.5 $ cd rubygems-1.3.5 $ sudo ruby setup.rb
/usr/bin/gem1.8 がインストールされる。
下記が対応していることが確認できる。
$ ls /usr/lib/ruby/gems/1.8/gems $ gem1.8 list
/var/lib/gems/1.8 を消去しても問題がないはず。