pikでインストールしたRubyでbundle exec rubyしたらエラーになった 解決編
前回までのあらすじ
pikでインストールしたRubyでbundle exec rubyしたらエラーになった - kk_Atakaの日記で出たRubyオプションのエラー。
$ bundle exec ruby app.rb ruby: invalid switch in RUBYOPT: -a (RuntimeError)
この-aオプションはどこから出てきたのかというと、"Documents and Settings"のaだという事がわかった。
結論
先に結論を書くと、やっぱりこうだった。以下、調査ログ。
調査
試しに以下のディレクトリに設置したRubyを使用しようとしたところ、下記のエラーが。(whichとか使えてるのはnyaosを使っているからです)
- C:\rubies\Ru by\
$ which ruby C:\rubies\Ru by\bin\ruby.exe $ bundle exec ruby myapp.rb ruby: illegal switch in RUBYOPT: -b (RuntimeError)
- C:\rubies\R uby\
$ which ruby C:\rubies\R uby\bin\ruby.exe $ bundle exec ruby myapp.rb ruby: illegal switch in RUBYOPT: -u (RuntimeError)
あぁやっぱりかー。
pikの設定変更
という事は、pik install時にデフォルトでDocuments and Settingsに入れられるのは避けなければならん。pikのhistoryにそれっぽいことが書いてあった。
=== 0.2.8 / 2010-06-22
https://github.com/vertiginous/pik/blob/master/History.txtBACKWARD COMPATIBILITY CHANGE
pik will now install new rubies to %USERPROFILE%\rubies\, instead of %PIK_BIN%\pik\ this was necessary to all for installation into %PROGRAMFILES% dir. If you'd like to keep the old path, run:
>pik config install_dir=C:\path\to\pik
なるほど。pik configコマンドでパスを指定するのか。
$ pik config install_dir=C:\rubies\ $ pik config ** CURRENT CONFIGURATION ** 187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32] * path: C:\rubies\Ruby\bin ** GLOBAL CONFIGURATION ** --- install_dir: C:\rubies\
install_dirがセットされた。次にinstall。Rubyはとりあえず1.9.1を指定。
$ pik install ruby 1.9.1 ** Downloading: http://rubyforge.org/frs/download.php/72076/ruby-1.9.1-p430-i386-mingw32.7z to: C:\Documents and Settings\USERNAME\.pik\downloads\ruby-1.9.1-p430-i386-mingw32.7z ruby-1.9.1-p430-i386-min...7z: 100% |oooooooooo| 4.7MB/ 4.7MB Time: 00:01:11 ** Extracting: C:\Documents and Settings\USERNAME\.pik\downloads\ruby-1.9.1-p430-i386-mingw32.7z to: C:\rubies\Ruby-191-p430 done ** Adding: 191: ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32] Located at: C:\rubies\Ruby-191-p430\bin
ダウンロードはUSERPROFILEか。でもインストール先はちゃんとinstall_dirになってる。
$ pik list * 187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32] 187: ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32] 191: ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32] 193: ruby 1.9.3p0 (2011-10-30) [i386-mingw32] $ pik use 1.9.1 $ pik list 187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32] 187: ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32] * 191: ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32] 193: ruby 1.9.3p0 (2011-10-30) [i386-mingw32] $ which ruby C:\rubies\Ruby-191-p430\bin\ruby.exe $ ruby -v ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32]
1.9.1確認。%USERPROFILE%\.pik\config.ymlも更新されてた。
--- "187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]": :path: !ruby/object:Pathname path: C:/rubies/Ruby/bin "187: ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32]": :path: !ruby/object:Pathname path: C:/rubies/Ruby-187-p352/bin "191: ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32]": :path: !ruby/object:Pathname path: C:/rubies/Ruby-191-p430/bin "193: ruby 1.9.3p0 (2011-10-30) [i386-mingw32]": :path: !ruby/object:Pathname path: C:/rubies/Ruby-193-p0/bin --- :install_dir: !ruby/object:Pathname path: c:\rubies\
最後に実行してみ…なんじゃこりゃあーー!
$ bundle exec ruby test.rb Error loading gem paths on load path in gem_prelude can't modify frozen string <internal:gem_prelude>:69:in `force_encoding' <internal:gem_prelude>:69:in `set_home' <internal:gem_prelude>:38:in `dir' <internal:gem_prelude>:76:in `set_paths' <internal:gem_prelude>:47:in `path' <internal:gem_prelude>:286:in `push_all_highest_version_gems_on_load_path' <internal:gem_prelude>:355:in `<compiled>' <internal:gem_prelude>:345:in `method_missing': undefined method `user_home' for Gem:Module (NoMethodError) from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/rubygems_integration.rb:57:in `user_home' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/settings.rb:107:in `global_config_file' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/settings.rb:6:in `initialize' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:185:in `new' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:185:in `settings' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:261:in `configure_gem_home_and_path' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:82:in `configure' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:136:in `definition' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:126:in `load' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:110:in `setup' from C:/rubies/Ruby-191-p430/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/setup.rb:7:in `<top (required)>' from C:\rubies\Ruby-191-p430\bin\ruby.exe:0:in `require'
- Ruby 1.9.1とrvmとエラー。 » サイキョウライン
- Rubyのインストールとか - 四角革命前夜
- [Ruby 1.9 - Bug #4809][Open] ruby1.9.1で GEM HOME をセットしていると常にエラーが発生する - Ruby Forum
Ruby1.9.1の現象らしい…。1.9.2に切り替えて…。
$ bundle exec ruby myapp.rb [2011-11-29 13:45:14] INFO WEBrick 1.3.1 [2011-11-29 13:45:14] INFO ruby 1.9.2 (2011-07-09) [i386-mingw32] == Sinatra/1.3.1 has taken the stage on 4567 for development with backup from WEBrick [2011-11-29 13:45:14] INFO WEBrick::HTTPServer#start: pid=4568 port=4567
ふぅ…いろんなことが起こりすぎた…。最後のエラーは置いといて、デフォルトでスペース入っているパスにインストールされると危ないな。