その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

Ubuntu12.04 にRVM を導入して、かなしみを吹っ飛ばしました

RVM (Ruby Version Manager) を導入しました。
あと、shebang"#!/usr/bin/ruby"とかハードコードされている場合でもRVM によるスイッチングを効かせられるようにしました。

RVM とは1つの環境に複数のRuby のバージョンを共存させるための管理ツールのことです。(ご存知だとは思いますが念のため)
とは言うものの、Ruby は専門外ですのでRVM に関する詳しい情報はググってください。

僕はRuby に関しては「読めない」「書けない」「喋れない」の3重苦に襲われているので、
基本的にはRuby で書かれたプログラムやアプリケーションを使うだけの人間です。
ただ一口に「使う」と言っても、プログラムによっては
「1.8系のRuby じゃなきゃやーよ!!」
だとか、
「1.9系以外はRuby じゃねえ!!」
だとか言われるので、1.8系と1.9系のどちらも欲しかったりします。
Linux だとバージョン指定でRuby をインストールさせたりも出来ますが、1.8系と1.9系のスイッチングが少々面倒臭いです。
RVM はそこら辺上手くやってくれるので、1つの環境に1.8系と1.9系を同居させるためにRVM をインストールしましたとさ。

インストール(Ubuntu 12.04 のばあい)

$ sudo apt-get install git-core
$ sudo apt-get install curl
$ curl -L get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm
上記のコマンド群を流し込めばOK だと思います。

注意!

$ sudo apt-get install ruby-rvm
でインストールできるRVM は入れてはいけません
大変残念な気持ちになりますし、大変残念な環境になります。
(インストール出来るRuby が微妙に古かったりするし、そもそもなんか上手く動かない)

RVM の使い方

インストール可能なRuby の一覧を参照
$ rvm list known

任意のRuby のインストール
$ rvm install <target>
例えば、
$ rvm install 1.8.7
としてやると、バージョン1.8.7の最新の安定版がインストールされます。

指定したバージョンのRuby の利用
$ rvm use <target>
例えば、
$ rvm use 1.8.7
としてやると、バージョン1.8.7 のRuby を使用することになります。
$ rvm use 1.8.7 --default
とすると、バージョン1.8.7 をデフォルトで使用する設定になります。

現在の状況の確認
$ rvm list


繰り返しになりますが、詳しくはググりましょう。

かなしみ到来

`rvm use xxx` でRuby のスイッチングは可能になりましたが、少し問題があります。
プログラムのshebang
'#!/usr/bin/ruby'
とか書かれていると、RVM のスイッチングは反映されません。
普通に'/usr/bin/ruby' のruby が実行されます。かなしい……

かなしみ少し解決

$ cd /usr/bin
$ sudo ln -s ~/.rvm/bin/ruby ruby
とかしてやると、RVM でインストールしたRuby が使えるようになりますが、
これは"--default" で指定したバージョンのRuby しか使えません。
なので、
$ rvm use 1.8.7 --default
の状態で
$ rvm use 1.9.3
としても、1.8.7 のRubyしか使えません。 ちょっとかなしい。

かなしみ解決

このかなしみをどうしよう……

……そうか、
Perl で解決すりゃ良いんだ!!!!!
というわけで、このかなしみを吹っ飛ばしてくれるスクリプトをPerl で書きました。
このプログラムを"ruby" と名付けて保存して、
$ chmod 755 ruby
とかしてやって、
$ sudo cp ruby /usr/bin/
してやるとRVM のスイッチングが反映されるようになります。

うれしい!!!!!!

とは言うものの

これ、本当にしっかり動くのかな……
運用し始めて1日しか経ってないから普通に不具合出るかも……
「これをいきなり本番環境に持ってったら死んだ!」とか言われても責任は負えませんのでよろしくお願いします。

というか、そのための

"#!/usr/bin/env ruby" だったのか……
なるほど。