複数のRuby環境の管理・切替ができるpikを実行できた

Tags: [ Ruby ] [ 備忘録 ] Published: 2011/10/04

Contents

あらすじ

  • 2011-10-03-1317642705にて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
  • 他のバージョンでもだめだった。ぐぬぬ。調べてみるとgemからではなくmsiからインストールした方がよいとの事なので一回gem uninstallしてmsiからインストールする事に。。。

* Downloads · vertiginous/pik · GitHub

から .msi をダウンロードして実行してください。今回は pik 2.8.0 を使いました。

http://d.hatena.ne.jp/miau/20110106/1294325095
  • msiからインストールする場合Rubyが空っぽの場合からでもいけるようなので既存のRubyを削除。。
  • そしてmsi実行

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]
  • インストール可能なRuby一覧表示。Ruby1.8から1.9からJRubyまで
$ 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. 環境変数がおかしかった
  2. コマンドプロンプトではなくnyaosを使っていた

この記事では1を解決させる。nyaosは 2011-11-24-1322138944 で。

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がでる


Author: kk_Ataka / Powered by Jekyll on GitHub Pages