at posts/single.html

ActiveRecord

るびま第4号にて O/R マッピングのライブラリが紹介されていた。 データベース自体、あまり使ったことが無い(まとめサイトで使っているくらい)だけど、恐れ多くもこの O/R マッピングを試してみることにした。 O/R マッピングを使うと、SQLを使ってデータベース (RDB) からデータを取得し、オブジェクトに格納、それをまた SQL でデータベースに書き込み…といった煩雑な処理を隠蔽できるみたい。

「るびま」では4種類のライブラリが紹介されていたけど、各所で評判の高い ActiveRecordをチョイス。 他ライブラリは、RDB とオブジェクトの対応関係を設定ファイルのようなものにあらかじめ書いておくんだけど、ActiveRecord は Ruby のソースに対応関係をそのまま書けるのが特徴だそうだ。気軽に使うには便利そう。

インストール - gem

ActiveRecord は、Ruby on Rails という Web フレームワークの一要素。なので、Rails をインストールすれば ActiveRecord も一緒に入る。

るびまの特集によると、 gem という Ruby 用のパッケージ管理ソフト (?) を使ってインストールするとのこと。なので、まずは gem をインストール。例によってレンタルサーバなので、ホームディレクトリ以下に入れるようにする。

$ wget 'http://rubyforge.org/frs/download.php/2412/rubygems-0.8.4.tgz'
$ tar zxvf rubygems-0.8.4.tgz
$ cd rubygems-0.8.4
$ ruby setup.rb config --prefix=$HOME
$ ruby setup.rb setup
$ ruby setup.rb install

これで、コマンドラインから gem と入力すると、 gem を動かすことができる。

インストール - Rails (gem から)

次は、 Rails のインストール。コマンド一発でインストールできる…はずだった。

$ gem install rails
Attempting local installation of 'rails'
Local gem file not found: rails*.gem
Attempting remote installation of 'rails'
/home/machu/lib/ruby/site_ruby/1.8/rubygems.rb:131:in `activate':  (Gem::LoadError)
Could not find RubyGem sources (> 0.0.0)

…むむ、何か変。Gem自身の読み込みに失敗しているっぽい。標準の場所 ( /usr/local/lib/ruby/gems ) ではなく、 $HOME/lib/ruby/gems にインストールしているせいか? rubygems.rb を眺めてみて気になった環境変数 GEM_HOME を設定してみたり、RubyGems再追求を読んでみたりしたものの、解決の糸口は見つからなかった。 ちゃんとRubyGemsのドキュメントを読まないとだめか。

インストール - Rails (tar.gz から)

まぁ、RubyGems に深入りするのは本筋じゃないし(次回のるびまでもやるみたいなのでそれに期待)、使いたいのは Rails の中でも ActiveRecord だけなので、とりあえずは gem を使わないで ActiveRecord 単体をインストールすることにした。

$ wget http://rubyforge.org/frs/download.php/2769/activerecord-1.6.0.tgz
$ tar zxvf activerecord-1.6.0.tgz
$ ruby install.rb
/usr/local/lib/ruby/1.8/ftools.rb:209:in `mkdir': Permission denied
 - /usr/local/lib/ruby/site_ruby/1.8/active_record (Errno::EACCES)

と、またもやエラー。 /usr/local/lib 以下にインストールしようとしているのが原因。 少々うんざりしながらも install.rb のソースを見てみる。以下の箇所が駄目っぽい。

require 'rbconfig'
include Config
$sitedir = CONFIG["sitelibdir"]

20行目あたりに、直接インストール先を記述して対応した。

$sitedir = "#{ENV['HOME']}/lib/ruby/site_ruby/1.8"

手抜きっぽいけど、これでいいかぁ。インストールとテストをやってみる。

$ ruby install.rb
$ irb
irb(main):001:0> require 'active_record'
LoadError: No such file to load -- active_record/support/dependencies
       from /home/machu/lib/ruby/site_ruby/1.8/active_record.rb:30:in `require'

まだ駄目ですか。 確かに、 active_record/support/dependencies というファイルは存在しない。 もう一度 install.rb を読んでみると、インストールするファイルの一覧を記述している箇所で、このファイルの名前が書かれていなかった。もしかしてこのファイルはメンテされてない? 仕方が無いので最後の手段。手動コピーで対応。

$ rm -rf $HOME/lib/ruby/site_ruby/1.8/active_record*
$ cp -rf lib/ $HOME/lib/ruby/site_ruby/1.8/
$ chmod -R 644 $HOME/lib/ruby/site_ruby/1.8/active_record*

これでようやく、準備が完了。ふう。

関連する日記