Rails3.1でSQLite3のエラー

丁度案件が一段落ついたのでサーバの整備.
折角なので色々入れ替えで同じサーバでRedmine(Rails2.3)やらRails3.1を入れておきたいのでRVMを利用して他の環境に依存しないように構築したい.

っで作業中にマイグレーションの実行でコケた.

主な環境

  • CentOS release 5.3 (Final)
  • Ruby 1.9.2p312
  • SQLite 3.7.8(元々はyum経由でsqlite.x86_64 3.3.6)

失敗したシンボルが無いとか出てるけどおっかしーなー

-bash-3.2$ rake db:migrate /usr/local/rvm/rubies/ruby-1.9.2-head/bin/ruby: symbol lookup error: /usr/local/rvm/gems/ruby-1.9.2-head/gems/sqlite3-1.3.4/lib/sqlite3/sqlite3_native.so: undefined symbol: sqlite3_open_v2

SQLite3は最新だしシンボルは無いという事はなさそうだ.

-bash-3.2$ sqlite3 -version
3.7.8 2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177

sqlite3_native.soの構成を確認してみと/usr/lib64の方の共有オブジェクトを利用してんな

-bash-3.2$ ldd sqlite3_native.so
	libruby.so.1.9 => /usr/local/rvm/rubies/ruby-1.9.2-head/lib/libruby.so.1.9 (0x00002b3850a3f000)
	libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00002b3850e5b000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b38510b6000)
	librt.so.1 => /lib64/librt.so.1 (0x00002b38512d2000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00002b38514db000)
	libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002b38516df000)
	libm.so.6 => /lib64/libm.so.6 (0x00002b3851918000)
	libc.so.6 => /lib64/libc.so.6 (0x00002b3851b9b000)
	/lib64/ld-linux-x86-64.so.2 (0x00002b385061a000)

色々調べてたらgemのsqlite3に入ってるREADME.rdocにヒントがあった.
古い方のライブラリを見ている様だったので、オプションで切り替えれば解決しそうな気がする.

If you have sqlite3 installed in a non-standard location, you can specify the location of the include and lib files by doing:

  gem install sqlite3 -- --with-sqlite3-include=/opt/local/include \
     --with-sqlite3-lib=/opt/local/lib

で以下の様にオプションで切り替えてインストールし直してみた.

gem install sqlite3 -- --with-sqlite3-include=/usr/local/include --with-sqlite3-lib=/usr/local/lib

無事にインストールできたのでマイグレーションを再実行してみた.

rake db:migrate

期待通り正常に実行できた!

これでやっと次の作業にすすめるv