[2021.5] Ruby/DBI はすでに完全に廃れています。'dbi' gem パッケージは 2010 年が最終です。'activerecord' が代替です。
Ruby/DBIは、Ruby用のデータベースアクセスインターフェイスライブラリです。データベースへの接続は抽象化しますが、クエリ、アップデートなどは、SQLを手書きします。
Ruby/DBIは内部で、DBMSごとの拡張モジュールを利用するようになっている。そのため、(1) DBMSそのもの、(2) 拡張モジュール、(3) Ruby/DBIという順にインストールしなければならない。
SQLiteの場合は、Ruby/DBIに拡張モジュールが同梱されているため、別途拡張モジュールを用意する必要はない。
(2005.5.4 リンク先を更新。)
アーカイブを入手し、解凍する。
SQLite: An Embeddable SQL Database Engine
$ tar xzvf sqlite-2.8.6.tar.gz $ mv sqlite sqlite-2.8.6 $ cd sqlite-2.8.6
コンパイル、インストールする。
$ ./configure $ make $ su # make install
ライブラリlibsqlite.soをシステムで使えるようにする。
# ldconfig
Ruby用のPostgreSQLモジュールは、次のところから入手する。
$ tar xzvf ruby-postgres-0.7.1.tar.gz $ cd ruby-postgres-0.7.1
PostgreSQLのインストール先は、--with-pgsql-dirオプションで指定する。
$ ruby extconf.rb --with-pgsql-dir=/usr/local/pgsql $ make $ su # make install
アーカイブをダウンロードし、解凍する。Cで書かれたモジュール (MySQL/Ruby) とRubyだけで書かれたモジュール (Ruby/MySQL) があるが、今のところ前者のほうがいいだろう。
$ tar xzvf mysql-ruby-2.4.3c.tar.gz $ cd mysql-ruby-2.4.3c
Makefileを生成する。MySQLのインストールされているディレクトリを--with-mysql-dirオプションで指定する。
$ ruby extconf.rb --with-mysql-dir=/usr/local/mysql
コンパイル、インストールする。
$ make $ su # make install
アーカイブを入手し、解凍する。
$ tar xzvf ruby-dbi-all-0.0.21.tar.gz $ mv ruby-dbi-all ruby-dbi-all-0.0.21 $ cd ruby-dbi-all-0.0.21
環境に合わせて設定、コンパイルする。SQLiteを使う場合はsetup.rb setupによる拡張モジュールのコンパイルが欠かせない。そうでない場合は、この行は不要。
$ ruby setup.rb config --without=dbd_sybase $ ruby setup.rb setup
インストールする。
$ su # ruby setup.rb install
SQLiteを使う場合でDBI.connect()がエラーとなるときは、libsqlite.soのロードに失敗しているかもしれない。
lddコマンドで確認する。次の例は、libsqlite.soのロードに失敗しているもの。
$ ldd /usr/local/lib/ruby/site_ruby/1.8/i586-linux/DBD/SQLite/SQLite.so libruby.so.1.8 => /usr/local/lib/libruby.so.1.8 (0x40015000) libsqlite.so.0 => not found libdl.so.2 => /lib/libdl.so.2 (0x400cb000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x400ce000) libm.so.6 => /lib/libm.so.6 (0x400fb000) libc.so.6 => /lib/libc.so.6 (0x4011c000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
not foundの行がある場合は、次のことを確認、実行する。
$ ls -l /usr/local/lib | grep -i sqlite -rw-r--r-- 1 root root 1312052 10 7 21:35 libsqlite.a -rwxr-xr-x 1 root root 720 10 7 21:35 libsqlite.la lrwxrwxrwx 1 root root 18 10 7 21:35 libsqlite.so -> libsqlite.so.0.8.6 lrwxrwxrwx 1 root root 18 10 7 21:35 libsqlite.so.0 -> libsqlite.so.0.8.6 -rwxr-xr-x 1 root root 891123 10 7 21:35 libsqlite.so.0.8.6
$ cat /etc/ld.so.conf /usr/kerberos/lib /usr/X11R6/lib /usr/lib/qt-3.1/lib /usr/local/mysql/lib/mysql /usr/local/pgsql/lib /usr/local/lib
$ su # ldconfig