Hiki-1.0.0 on ruby-1.9.3

Hiki-1.0.0 on ruby-1.9.3

リリースノートには、ruby-1.8.7をサポートする最後のリリースとあるが、ruby-1.8.7上のCGIとしてはエラーが出て動かないので、ruby-1.9.3上での環境構築を推奨する

FreeBSD上での必須ports

  • lang/ruby19
  • devel/ruby-gems

ruby-1.8.7と共存させる場合は、ports構築時にRUBY_VERを指定する、スクリプト中の/usr/bin/env ruby/usr/bin/env ruby19へ書き換える等の作業が必要

必須rubygems

  • docdiff
  • hikidoc

gem19 installで突っ込む

x-math(x-hiki) pluginを使う

http://www.hinet.mydns.jp/%7Ehiraku/で配布されている x-hiki-0.21.3は hiki-1.0.0/ruby-1.9未対応なので要パッチです

動作に必要な修正は、大別して4点あり

  • ruby-1.9では、default encodingが utf-8
  • ruby-1.9では Stringの sizeメソッドが文字数を返すので、Contents-Lengthの計算に使えないため、bytesizeメソッドに置換が必要
  • hiki-1.0.0の @cgi.paramsの定義が変更になっておりリクエストをパースした際に要素数 1の場合は、ハッシュではなく要素そのものを返す(つまり、@cgi.parms[key][0]は、@cgi.parms[key]と書き換える必要有り)
  • hiki-1.0.0が返す @cgi(実体は Hiki::Request型オブジェクト)に user_agentメソッドが未実装(Rack使用時は、Rack::Request型に置き換わるので問題ない)

最後の1点は、hiki-1.0.0側の互換性の問題です(標準添付のプラグインは使用していないメソッドです)

パッチ

警告メッセージ軽減

代表的な警告メッセージは以下の2種

  • regexp match /.../n against to UTF-8 string
    • UTF-8な文字列に n付きなASCII-8BIT正規表現を適用している
    • hiki/util.rb内の escapeメソッド群が発生源
    • ruby-1.8のcgi.rbからコピーされたコード片なので、ruby-1.9のcgi/util.rb由来のコードに置き換え可能
  • variable \$KCODE is no longer effective
    • hiki/filter/bayes_filter/bayes.rbにて、\$KCODEが使われている
    • 外部エンコードの参照は、Encoding.default_external.to_s.downcaseに置き換える
    • 正規表現のエンコード制御は、force_encoding付きの文字列リテラルに置き換える

パッチ

既存のコンテンツの変換

内部コードのUTF-8化に伴いコード変換が必要 tool/convert.rbに変換ツールがあるが、ページタイトル等のメタデータが消えるのでうれしくない

ページ名(タイトルにあらず)がマルチバイト化されていない場合は、ページ名は変化しないので、 コンテンツデータを手作業で変換したほうが良い

  1. textディレクトリ以下のファイルの中身をEUC-JPから UTF-8へコード変換(nkf -w辺りが便利)
  2. info.db内のtitleを EUC-JPから UTF-8へ変換(marthal dumpなデータなので注意)
  3. hiki.confsite_nameを (2)と同様に変換
  4. hikiconf.rbを EUC-JPから UTF-8へ変換して、@charsetを修正する

上記の(1)〜(3)までの作業を自動化したスクリプト(tiny-hiki-info-conv)を作ってみた (UTF-8から EUC-JPへの逆変換もサポートした)

sedを使って強引に書き換える際に、titlesite_nameに sedのメタ文字が含まれることを考慮していないので使う前に確認し、コードを弄るなり手で変換するなり対処すること

作業前に元データのバックアップを忘れずに!!

旧コンテンツの履歴サポート

misc/plugin/history.rbにて、旧コンテンツの編集履歴を参照する際に、文字コードを変換するパッチ

@options['repos.old_revision']@options['repos.old_charset']にて、古い文字コードで記録された最後の revisionとその文字コードを指定してください

パッチ

Last modified:2013/06/26 13:25:03
Keyword(s):
References:[Tips]