手動で migrate.rbを実行して UTF-8化してあったのに、再度 90migrate.rbが走ってしまって、データが壊れた。慌てず ZIPファイルを解凍して元通り。
grepと同じ程度に簡単に、データファイルや tdiary.confのバージョンナンバーをすべて書き換える方法(sed?)が思いつかなかったので、tdiary/lang/ja.rbの migrate_to_utf8を無効化して済ませた。
def migrate_to_utf8( str ) return str to_native( str, 'EUC-JP' ) end
素通しとはいえ migrationは実行されるので、数十から百ちかい数のファイルを開いて書き込んで閉じてといった負荷をレンタルサーバーにかけた。ローカルでは一分以上かかった。
のが嬉しい。気になっていて、よっぽど自分でやってやろうかと思っていたので。
@accesskey_enabledの設定が存在しない(=>nil => falseと判断される)ために、アクセスキーがなくなってしまって戸惑った。ここはデフォルトを過去と互換にして欲しかった(設定名を @disable_accesskeyにするとか)。いまさらだけど。
NaviUserCGIが木偶だからだった。原因は category.rbにはなく、できの悪い CGIのモックを渡した navi_user.rbにある。
class Info include ERB::Util def initialize(cgi, years, conf, args = {}) @cgi = cgi @years = years @conf = conf @category = args[:category] || @cgi.params['category'] @year = args[:year] || @cgi.params['year'][0] #=> NoMethodError: undefined method `[]' for nil:NilClass
class NaviUserCGI attr_reader :params, :referer, :user_agent def initialize(datestr) @params = {'date' => [datestr]} # <<<注目! @referer = nil @user_agent = nil end def request_method 'GET' end end
オリジナルの CGI#paramsは単一のデフォルト値( [].freeze )を持った Hashなんだよね……。
navi_user.rbも recent_list.rbと同じように書き換えてやろうか。
* 一か所、大文字も小文字も存在しない配列のソートを普通のソートに戻しました。