PC-BSD 8.2 i386 で一般ユーザーのディレクトリに RubyGems 1.8.2 をインストールした時の事の覚え書き。
Ruby は、何もしないで既に入っていた 1.8.7 を使用。
前にも、さくらの共有サーバーにRubyGemsを入れてRuby/DBIを入れた時のメモでやってたんだけど忘れちゃったので、もう一度。
RubyGems Manuals の 3. Installing RubyGems に手順があります。
- RubyForge から最新版をダウンロード
- ダウンロードしたファイルを展開します。(下記は tgz の場合)
$ tar xzvf rubygems-1.8.2.tgz
- セットアップします。 ($HOME/local/rubygems 以下にインストールする場合)
$ cd rubygems-1.8.2
$ setenv GEM_HOME $HOME/local/rubygems/gems
$ ruby setup.rb --prefix=$HOME/local/rubygems
(setenv は、csh系の場合、sh系の場合は、 export GEM_HOME=$HOME/local/rubygems/gems) - 後は、.cshrc で環境変数の設定をする(sh 系の場合はそれに合った方法で設定する)。次のような物を書く。
setenv GEM_HOME $HOME/local/rubygems/gems
setenv RUBYLIB $HOME/local/rubygems/lib
setenv RB_USER_INSTALL true
setenv path ($path $HOME/local/rubygems/bin)
- 書き換えた .cshrc を反映する。
$ source ~/.cshrc
$ rehash
(自分の場合、以前、FreeBSD 用の nave もどきを作ってみた に書いたように “set path = (…)” を 行を “if ($#path == 0) then” の行と “endif” の行でくくっていた流れで、 if 文の中に RubyGems の bin を追加する部分を入れちゃったから上手くいかなかった。 if 文の条件は、考え直さないといけないなぁ。)
これで、
$ gem18 help
が上手くいったら OK。
/home/hunyosi/local/rubygems/bin/gem18:8:in `require': no such file to load -- rubygems (LoadError) from /home/hunyosi/local/rubygems/bin/gem18:8
みたいなエラーが出たら、環境変数(恐らく、 RUBYLIB )の設定が間違っているので確かめましょう。
上で、設定している環境変数の意味は、次の通りです。
- GEM_HOME
-
gem コマンドでインストールした物が入る場所(gem リポジトリというらしい)。
恐らく、どこのディレクトリを設定しても良いんだろうと思われるけど、もし、 RubyGems をインストールしたディレクトリの中に入れたいなら、 $(–prefixで指定したディレクトリ)/gems にするのが、 3.2 Installing RubyGems in a User Directory の Notes の 3. で勧められているようです(そう書いてあるんだろうと推測しました)。 - RUBYLIB
-
ruby がライブラリを探す追加のディレクトリ。
デフォルトの検索ディレクトリが消されることは無くて、デフォルトの検索ディレクトリの前に追加されます。
詳しくは、$: ($LOAD_PATH) 組み込み変数の説明を参照してください。
ここでは、ユーザーのディレクトリにインストールした RubyGems のライブラリを ruby から見えるように設定しています。 - RB_USER_INSTALL
-
Ruby のライブラリの中には、ダイナミックリンクライブラリもインストールされる物がありますが、その場合、普通は、ダイナミックリンクライブラリに chown/chgrp をします。
RB_USER_INSTALL を true にすると、それをしなくなるので、 root の権限が無くても、インストールできます。
RB_USER_INSTALL を true にしないで、一般ユーザーでダイナミックリンクライブラリを含むライブラリをインストールしようとすると “chown/chgrp: Operation not permitted” のエラーが出ます。
gem コマンドには –user-install っていうオプションがあって、これを指定すると GEM_HOME 環境変数の代わりに、 $HOME/.gem/ruby/1.8/ を gem リポジトリとして、そこにインストールするみたいです。
なんとなく、 –user-install オプションは、ちょっと自分用にライブラリをインストールしたいなって時のためのオプションなのかなって思いましたけど、どうなんでしょうかね…。
ここまでの部分の参考にしたサイト:
- gem installでsudoしたくないでござる絶対にsudoしたくないでござる+
- Rubygems に /usr/bin を触らせないためには gem をユーザーディレクトリで運用する++
- さくらのレンタルサーバーに RubyGems をインストールする手順
RubyGems でライブラリを検索するとき search サブコマンドを使いますが、 -r オプションを指定しないと、ローカルしか検索してくれないみたいです。(以下は、 “dbi” を名前に含むライブラリを検索する場合)
$ gem18 search dbi -r
インストールする際、場合によっては、ライブラリの Makefile 作成スクリプト(extconf.rb)に –with-xxx-dir 等のオプション(mkmf のマニュアルを参照)を渡したい場合がありますが、その場合は、 “--
” (ハイフン二つ)の後ろに書くみたいです。(rdbi-driver-postgresql ライブラリのインストールで オプション –with-pg=/opt/pgsql9.0 を渡す場合)
$ gem18 install rdbi-driver-postgresql -- --with-pg=/opt/pgsql9.0
RubyGems でインストールしたライブラリを使う場合は、そのライブラリを require する前に、 require 'rubygems'
します。
ピンバック: Ruby の RDBI で PostgreSQL にアクセスしてみた | ふにょいサイト