丁度案件が一段落ついたのでサーバの整備.
折角なので色々入れ替えで同じサーバで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