/ 最近 .rdf 追記 編集 設定 本棚

脳log[20050805] Rubyから SQLiteが使えるようになったっぽい



2005年08月05日 (金)

Rubyから SQLiteが使えるようになったっぽい

コンパイルができなくて以前挫折した SQLite。今回も sqlite3-rubyの DBD(database driver)のコンパイルはできなかった。でも sqlite3-rubyには DL(dynamic link?)を使った DBDも用意されてて、これを使うのにコンパイルは必要ない。依然として SQLite自体のコンパイルは必要だが。

以下、メモ。

 SQLite3のダウンロード

http://www.sqlite.org/ の downloadから

sqlite-3.2.2.tar.gz (1385618 bytes)
   A tarball of the complete source tree for SQLite version 3.2.2 including all of the documentation.

と書かれてるものを。どうせなら新しいものをってことでバージョンナンバーが 3で始まる SQLite3をダウンロードする。

予め Linux用にコンパイルされた soファイルもダウンロードできるけど、これを使おうとすると 'libc.so.6' が見つからないとか言われるので横着せずにソースコードをもらってくる。(/usr/lib に libc.so.4はあるんだけど……)

 configure と make

ソースをディレクトリごとサーバーにアップする。READMEに、別にディレクトリを掘ってそこで作業するといいって書いてあるので buildというディレクトリを READMEのあるフォルダに作る。

ライトプランではシェルログインができないので telnetや SSHで

cd build
../configure

というわけにはいかない。困ったので buildフォルダに index.rbを置いて、実行可能にして、中身を下のようにして CGIの要領で実行した。

#!/usr/local/bin/ruby
begin

cmd = [
  'sh ../configure --enable-utf8',
  'make'
];

print "Content-Type: text/plain\n\n";
cmd.each{|c|
  puts "% #{c}", `#{c}`, $?.inspect, '';
}

rescue Exception => e
  puts e.message;
  puts e.backtrace.join("\n");
end

何も問題なく大量の *.oファイルと *.loファイルの他に sqlite3(コマンドラインツール)ファイルや .libs/sqlite.so.8などが作られた。.libs/libsqlite3.soという、FFFTPからは矢印付きのフォルダとして表示されるファイルもできてる。シンボリックリンクとかいうものか?

 make install

するとインストールが完了するわけだけど、どこにインストールするのかを多分 configureの時に指定しないといけなくて、それをしてないので成功しないかもしれない。そもそもインストールとかしてもいいの?レンタルサーバーに。

必要なファイルは既にできあがってるので結局、make install はせずに、libsqlite.so.8を libsqlite.soに改名して、SQLiteを使う Rubyスクリプトと同じフォルダにコピーして使ってる。

 sqlite3-rubyのインストール 〜Rubyスクリプトから SQLite(libsqlilte3.so)を使うために〜

rubyforgeから sqlite3-rubyをダウンロードして展開する。SQLiteと似た感じで

ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

とするとコンパイルからインストールまで完了するのだけど、SQLite関連のファイルがインストールされてないので sqlite3.hが存在しないと言われてしまう。それに ruby.hだとか Ruby関連のファイルも必要そうだし、そんなの(/usr/includeとかに)見当たらないし、全部ローカルに用意するのも なんだかなぁ だから諦めた。

lib/ の中の sqlite3.rbと sqlite/* と sqlite/driver/dl/* を、libsqlite3.soと同じように(SQLiteを使うRubyスクリプトから)見えるところに置いておけばなんとかなる。

いや、なんとかならない。

require 'sqlite3'
db = SQLite3::Database.new('hoge.db')

とすると libsqlite.soが見つからないといわれる。インストールしてないからだ。だもんで

require 'sqlite3'
module ::SQLite3
  SQLITE3_LIB_PATH = File::dirname( __FILE__ )
end
db = SQLite3::Database.new('hoge.db')

として、カレントディレクトリにある libsqlite3.soを読み込ませてる。