hetemlにRubyGemsをインストールする

"いざhetemlにRubyGemsをインストールしようとしたら, すんなりとインストールされず, なんてこったい"を2回繰り返してしまったので, 3度目がないようにメモ.

RubyGemsのインストール先ディレクトリを作成

当然/usr/localとかには入れられないので, ホーム配下にインストール先のディレクトリを作っておく.

$ cd
$ mkdir .gem

RubyGemsのソースをダウンロード

とりあえず適当なディレクトリを作ってそこにダウンロードし, 伸張. RubyGemsのバージョンに合わせて, URLは適当に変える.

$ mkdir src
$ cd src
$ wget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.6.tgz
$ tar zxf rubygems-1.3.6.tgz
$ cd rubygems-1.3.6

ソースを修正

後はインストールすればいいんだけど, このままではgemコマンドがコケるので, ソースを直しておく. ちなみにコケる理由は, rubyコマンドのパスが違うから. RubyGems自体はRbConfig::CONFIG[:bindir]からrubyコマンドのありかを見ているんだけど, なぜかそこにはないのでそれを直す.

でも食い違ってるっておかしくないですか(・∀・`)?

$ vi lib/rubygems.rb

127行目あたり.

:bindir            => RbConfig::CONFIG["bindir"],

コレを:

:bindir            => '/usr/bin',

って直に書いちゃう.

インストール

$ ruby setup.rb --prefix=~/.gem

環境変数の定義

.bashrcを新規作成して書けばいいんだけど, .bash_profileもないので, .bashrcが読込まれない. 一応.bashrcに書くのなら以下のようにでもしとけばいいのかな?

$ cd
$ vi .bash_profile
source .bashrc
$ vi .bashrc
export GEM_HOME=~/.gem
export PATH=~$GEM_HOME/bin:$PATH
export RUBYLIB=$GEM_HOME/lib

次からログインしたときは, .bashrcを読込んで環境変数を定義してくれるけど, 今は.bashrcが読込まれてないので, sourceで読込んでおく. 次回ログインからは不要.

$ source .bashrc

インストールされてるか確認

$ gem -v
1.3.6

ちなみに

RubyGemsをhetemlに入れる理由なんて, Sinatra + CGIでサーバーサイドの処理を書きたい, ぐらいだと思うのだけれど, CGIを実行するユーザーがログインユーザーとは違うので, 環境変数GEM_HOMEとRUBYLIBが定義されておらず, rubygemsを取り込むと盛大に血反吐を吐く.

ので, *.cgiの先頭に:

ENV['GEM_HOME'] = 'ログインユーザーの環境変数GEM_HOMEと同じ値("~"ってやっても無理なので絶対パスで)'
$: << File.join(ENV['GEM_HOME'], 'lib')

って書いておくといいかなーと.

コレはhetemlに限らず, 他のレンタルサーバー(さくらとか)でも一緒かな?