hetemlにRubyGemsをインストールする
"いざhetemlにRubyGemsをインストールしようとしたら, すんなりとインストールされず, なんてこったい"を2回繰り返してしまったので, 3度目がないようにメモ.
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に限らず, 他のレンタルサーバー(さくらとか)でも一緒かな?