Ruby/DBIと, SQLite・MySQL・PostgreSQL拡張モジュールのインストール

[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

アーカイブを入手し、解凍する。

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

PostgreSQL拡張モジュール

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

MySQL拡張モジュール

アーカイブをダウンロードし、解凍する。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

Ruby/DBI

アーカイブを入手し、解凍する。

$ 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

Note.

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の行がある場合は、次のことを確認、実行する。

  1. libsqlite.so.0が存在するか。
    $ 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
    
  2. /etc/ld.so.confにlibsqlite.soがあるディレクトリが含まれているか。
    $ 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
    
  3. ldconfigコマンドを実行する。
    $ su
    # ldconfig