From: KOSAKI Motohiro Date: 2011-01-28T22:29:52+09:00 Subject: [ruby-dev:43139] ext/dbmのデフォルトDBについて 小崎です 気づいている人もいると思うのですが、最近のBerkleyDBがはいっているシステムで test-all するとDBMのテストで DB->del: attempt to modify a read-only database DB->del: attempt to modify a read-only database と不愉快な出力が二回でます。(すくなくともうちのdb-4.8 は出ます) ソースをみたところ、抑止するAPIはあるにはあるのですが、dbm_hogehoge形式の 旧来と互換性のある形式では存在しません。つまりRubyのdbmバインディングからは 実質使えません。 それじゃあというので、--with-dbm-typeを使ってバックエンドをgdbmに変えてみたところ gdbm 1.8 で一部互換性が崩れているらしく以下の failureが出ます 1) Failure: test_s_open_no_create(TestDBM) [/home/kosaki/linux/ruby/test/dbm/test_dbm.rb:83]: Expected # to be nil. 2) Failure: test_writer_open_notexist(TestDBM2) [/home/kosaki/linux/ruby/test/dbm/test_dbm.rb:512]: Errno::ENOENT expected but nothing was raised. (実のところ、まったく同じ失敗がext/gdbmのテストで出ていたので、そちらはテストを修正して対処した) バックエンドをqdbmにすると変なエラーもでないし、テストも全部通ります。 じゃあ、デフォルトをqdbmにするべきかというと悩ましくて、正直qdbmは一番マイナーだし require 'dbm' してqdbmが動くのはあんまり直感的ではない気がします。 放置するのが一番いいんですかねぇ。 悩んでいるので、みなさんの意見をお聞かせ願えませんでしょうか。