複数のRuby環境の管理・切替ができるpikを実行できた
あらすじ
- Rubyのgemバージョン管理ができるBundlerを実行できなかった - kk_Atakaの日記にてBundlerでのgem管理に失敗した
- 別の方法はないかと調べているとRubyをバージョンごとに管理できるrvmとpikを見つけた
- とりあえず別出ししておいて安定させたい環境と色々試行錯誤したい環境に分けられる?
- Windows環境なのでpikを使ってみようとインストールしてみた
インストール手順(gem)
※gemでは実際にRubyをinstallする段階の所で失敗したので、実際は次のmsiを使ってインストールした。
- gemでOK
gem install pik
- pikをインストールするにはpik_installコマンドを実行する必要があるが、フォルダを作成し、PATHに追加してから実行してくれと言われる
$ pik_install Usage: pik_install path\to\install You should install to a directory that is in your system path, or add the directory to your system path. Do not install to your ruby's bin directory because pik will remove it from the path when switching versions. Example: C:\>path PATH=C:\tools;C:\ruby\Ruby-186-p383\bin;C:\WINDOWS\system32;... C:\>pik_install C:\tools
- C:\pikフォルダ作成しPATHに追加し再度
$ pik_install C:\pik Thank you for using pik. mkdir -p C:\pik mkdir -p %userprofile%/.pik Installing to C:\pik cp C:/ruby/lib/ruby/gems/1.8/gems/pik-0.2.8/tools/pik_runner.exe C:\pik cp C:/ruby/lib/ruby/gems/1.8/gems/pik-0.2.8/tools/pik.bat C:\pik cp C:/ruby/lib/ruby/gems/1.8/gems/pik-0.2.8/tools/pik.ps1 C:\pik creating %USERPROFILE%/.pik/.pikrc pik is installed The directory you installed to is not in the sytem path. C:\pik You will need to add it. if you want to use pik with git bash, add the following line to your ~/.bashrc: [[ -s $USERPROFILE/.pik/.pikrc ]] && source $USERPROFILE/.pik/.pikr
- ホームとC直下にファイルが作成された
インストール手順(msi)
※gemから入れるとRubyをinstallする段階でエラーが表示された。
$ pik install ruby -v 1.9.2-P136 pik 0.2.8 There was an error. Error: private method `gsub' called for nil:NilClass in: pik/commands/install_command.rb:24:in `execute' in: pik_runner:33
* Downloads · vertiginous/pik · GitHub
から .msi をダウンロードして実行してください。今回は pik 2.8.0 を使いました。
http://d.hatena.ne.jp/miau/20110106/1294325095
pikコマンドを打つ際にRubyが一つも入っていないとエラーになるため、%USERPROFILE%\.pik\config.ymlにダミーのバージョンを記載する必要がある。
--- "000: ruby 0.0.0 (dummy ruby for pik)": :path: !ruby/object:Pathname path: C:/pik/dummy --- {}
で、使用法へ。
使用法
- 現在インストールされているRuby表示
$ pik list * 187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]
$ pik list -r --- DevKit: 3.4.5r3: http://rubyforge.org/frs/download.php/66888/devkit-3.4.5r3-20091110.7z IronRuby: 0.3.0: http://rubyforge.org/frs/download.php/53552/ironruby-0.3.0.zip 0.5.0: http://rubyforge.org/frs/download.php/57126/ironruby-0.5.0.zip 0.6.0: http://rubyforge.org/frs/download.php/59717/ironruby-0.6.0.zip 0.9.0: http://rubyforge.org/frs/download.php/61382/ironruby-0.9.0.zip 0.9.1: http://rubyforge.org/frs/download.php/64504/ironruby-0.9.1.zip 0.9.2: http://rubyforge.org/frs/download.php/66606/ironruby-0.9.2.zip "1.0": http://rubyforge.org/frs/download.php/70179/ironruby-1.0.zip 1.0-rc1: http://rubyforge.org/frs/download.php/67955/ironruby-1.0-rc1.zip 1.0-rc2: http://rubyforge.org/frs/download.php/69180/ironruby-1.0-rc2.zip 1.0.0rc: http://rubyforge.org/frs/download.php/69853/ironruby-1.0.0rc.zip 1.0rc3: http://rubyforge.org/frs/download.php/69665/ironruby-1.0rc3.zip 1.0v4: http://rubyforge.org/frs/download.php/70181/ironruby-1.0v4.zip JRuby: 1.5.6: http://jruby.org.s3.amazonaws.com/downloads/1.5.6/jruby-bin-1.5.6.zip 1.6.4: http://jruby.org.s3.amazonaws.com/downloads/1.6.4/jruby-bin-1.6.4.zip Ruby: 1.8.7-p302: http://rubyforge.org/frs/download.php/72087/ruby-1.8.7-p302-i386-mingw32.7z 1.8.7-p330: http://rubyforge.org/frs/download.php/73720/ruby-1.8.7-p330-i386-mingw32.7z 1.8.7-p334: http://rubyforge.org/frs/download.php/74296/ruby-1.8.7-p334-i386-mingw32.7z 1.8.7-p352: http://rubyforge.org/frs/download.php/75108/ruby-1.8.7-p352-i386-mingw32.7z 1.9.1-p429: http://rubyforge.org/frs/download.php/71496/ruby-1.9.1-p429-i386-mingw32.7z 1.9.1-p430: http://rubyforge.org/frs/download.php/72076/ruby-1.9.1-p430-i386-mingw32.7z 1.9.2-p0: http://rubyforge.org/frs/download.php/72160/ruby-1.9.2-p0-i386-mingw32.7z 1.9.2-p136: http://rubyforge.org/frs/download.php/73723/ruby-1.9.2-p136-i386-mingw32.7z 1.9.2-p180: http://rubyforge.org/frs/download.php/74299/ruby-1.9.2-p180-i386-mingw32.7z 1.9.2-p290: http://rubyforge.org/frs/download.php/75128/ruby-1.9.2-p290-i386-mingw32.7z 1.9.2-rc1: http://rubyforge.org/frs/download.php/71498/ruby-1.9.2-rc1-i386-mingw32.7z 1.9.2dev-preview3-1: http://rubyforge.org/frs/download.php/71175/ruby-1.9.2dev-preview3-i386-mingw32-1.7z
- pikフォルダへRubyインストール
$ pik install ruby -v 1.9.2-p0 pik 0.2.8 ** Downloading: http://rubyforge.org/frs/download.php/72160/ruby-1.9.2-p0-i386-mingw32.7z to: %userprofile%\.pik\downloads\ruby-1.9.2-p0-i386-mingw32.7z ruby-1.9.2-p0-i386-mingw32.7z: 100% |oooooooooo| 5.7MB/ 5.7MB Time: 00:00:20 You need the 7zip utility to extract this file. Would you like me to download it? (yes/no) |yes| y [ENTER] 7za465.zip: 100% |ooooooooooooooooooooooooooooo| 352.5KB/352.5KB Time: 00:00:00 ** Extracting: %USERPROFILE%\.pik\downloads\ruby-1.9.2-p0-i386-mingw32.7z to: %USERPROFILE%\.pik\rubies\Ruby-192-p0 done ** Adding: 192: ruby 1.9.2p0 (2010-08-18) [i386-mingw32] Located at: %USERPROFILE%\.pik\rubies\Ruby-192-p0\bin
お、行けた。*1
- 再度確認。1.9が入ってる。
$ pik list * 187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32] 192: ruby 1.9.2p0 (2010-08-18) [i386-mingw32]
最後にswitch or sw or use コマンドを使用する事でrubyのバージョンを切り替えられる……はずだったのだが、どうにも試した環境だと変わらなかった。何故変わらんのだー。ので、今回の導入は見送りして少し調べないといかん。
20111124追記
……と、切り替わらなかったのが前回までの話。原因は主に二つあり、なぜ切り替わらなかったのかわかるためにはpikの動きを追う必要があった。
この記事では1を解決させる。nyaosは 複数のRuby環境の管理・切替ができるpikを実行できた nyaos編 - kk_Atakaの日記 で。
2-1. pik_runner.exe の処理を読むと最後に切り替えたRubyのパスを環境変数に追加するために%USERPROFILE%\.pik\pik.batを実行していると書いている。
- ただし、このpik.batはインストールしてpik listとかって実行する時のpik.batとは違う
- そのpikはC:\pikとかに入っているはず
知らなかった……こんなbatファイルが生成されているとは。このSET PATHを見ると……ギャーーー!! なんかpath変数の頭の方に%PATH%が入っていて、pikで追加したRuby(%USERPROFILE%\.pik\rubies\Ruby-192-p0\binなど)より既存Ruby(C:\ruby\binなど)のパスが前におるじゃないかぁぁぁ! というわけで、path変数から%PATH%を取り除いたのが一つ。これでコマンドプロンプトからは動いた!
その他
今回は使わなかったコマンドたち
既に入っているRubyをpikへ追加するaddと削除するuninstall
$ pik add Rubyのパス(ruby.exeのある場所) $ pik uninstall ruby -v 187
※コマンドはバージョンによって若干記述が違う様子。特にsw or switch or useあたり?
*1:config.ymlを開きっぱにしている場合、Permission deniedがでる