WiLiKi:データベースのコード変換
Shiro (2005/11/11 02:26:49 PST): euc-jpだけでは済まない仕事が色々出てきたので、 こちらのサイトもぼちぼちutf-8 Gaucheに移行しようと考えているが、 WiLiKiは内部エンコーディングでデータベースにページデータを書き出しているので Gaucheを入れ換えただけではまずい。そこで移行ツールを書いてみた。 一応動いてるみたいだが、もしかすると不具合があるかもしれない。御注意。 (なおこのWiLiKi自体はまだutf-8に移行してない。そのうちね。)
なお、gdbmは変更を繰り返すうちにだんだんdbmファイルのサイズが増えるという 特性がある。このツールでコピーするとごみ領域が削られるので コンパクテーションにも使える。
ソース
http://gauche.cvs.sourceforge.net/gauche/Gauche-scripts/wiliki-copydb?only_with_tag=HEAD&view=markup
使いかた
wiliki-copydb [-s type][-d type] srcdbm srclog dstdbm dstlog
WiLiKiのdbmデータベースsrcdbとログファイルsrclogをそれぞれ dstdbmとdstlogで指定される名前のデータベース、ログファイルへと コピーする。
-s、-dオプションはそれぞれソースとコピー先のdbmタイプおよび文字エンコーディングを dbmtype.encodingという形式で指定。dbmtypeとencodingは独立して 省略できる (dbmtypeを省略する場合はencodingの前のピリオドが必要)。 dbmtypeのデフォルトはgdbm、encodingのデフォルトはGaucheの内部エンコーディング。
- gdbm.euc-jp : dbmタイプはgdbm, 文字エンコーディングはeuc-jp
- fsdbm.utf-8 : dbmタイプはfsdbm, 文字エンコーディングはutf-8
- fsdbm : dbmタイプはfsdbm。文字エンコーディングはGaucheの内部エンコーディング。
- .utf-8 : dbmタイプはgdbm。文字エンコーディングはutf-8
wiliki-copydb [-s type][-d type] srcdbm dstdbm
ログファイルを使っていない場合やコピーが不要な場合(dbmファイルの コンパクテーションに使う場合)はこちらの形式でも良い。
例
コード変換
wiliki-copydb -s .euc-jp -d .utf-8 old.dbm old.log new.dbm new.log
dbmタイプ変換
wiliki-copydb -s fsdbm -d gdbm old.dbm new.dbm
gdbmコンパクテーション
wiliki-copydb old.dbm new.dbm
バグ報告、コメント、その他
Setu? ありがとうございます。近々、使っているサーバの移行があり、新しいサーバは Debian sarge で、gaucheの内部コードが utf-8 でビルドされてます。それで、ソースから入れ直すか、コードを utf-8 に切替えるか迷ってました。問題はデータベースのコード変換をしなくちゃならないことだけのようだったので、探すか作るかしようと思っていました。今みつけて嬉しかったです。 -- 2005/11/11 06:24:29 PST
- Setu? gosh 0.8.3(Debian 3.1 Sargeの標準) 上では、エラーになりました。
$ wiliki-copydb *** ERROR: #<class <app-error>> Stack Trace: _______________________________________ 0 (load-dbm-class DEFAULT_DBM) At line 74 of "/usr/local/bin/wiliki-copydb" 1 (type->dbmclass&encoding stypespec) At line 93 of "/usr/local/bin/wiliki-copydb" 2 (let () (guard (e ((<app-error> e) (format (current-error-port) "~ ... [unknown location]
深入りせずに、gosh 0.8.7 の載っているマシンにデータベースをコピーして、変換しました。-- 2007/05/03 23:33:06 PDT