さとうふみやす @ OSS テクノロジです。

At Fri, 11 Apr 2008 22:44:16 +0900,
S_Konno(今野 滋) wrote:
> CGIを別の新しいサーバー機に引っ越したら、DBMがデータを読まなくなってしまいました。
   ***snip***
> $ ruby test.rb
> test.rb:3:in `initialize': Inappropriate file type or format - hoge (Errno::E079)

Berkeley DB (BDB) のバージョンが異なるのでは?

> $ ruby -v
> ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-freebsd7]

移行元と移行先で

  $ ldd /PATH/TO/lib/ruby/1.8/ARCH/dbm.so |grep db

の実行結果を比べてみるとどうでしょう?

例えば、手元の CentOS 4 (i386版) の Ruby だと:

  $ ldd /usr/lib/ruby/1.8/i386-linux-gnu/dbm.so |grep db
          libdb-4.2.so => /lib/tls/i686/libdb-4.2.so (0x005cb000)

> 古いデータ形式を新しいデータ形式に変換する何か良い方法はありますでしょうか?

移行元の環境で db_dump でダンプして、
移行先の環境で db_load でロードする。

ちなみに Debian だとコマンド名は
  db<BDBメジャーバージョン>.<BDBマイナーバージョン>_dump
だったりしますが。(それに Debian の Ruby の DBM (libdbm-ruby1.x)
は BDB じゃなくて GDBM とリンクしているんですけどね)

-- 
-- Name: SATOH Fumiyasu (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- Personal Home: http://www.SFO.jp/blog/