2009年08月14日(Fri) 玄米から復活中 [長年日記]
● [tDiary] tDiaryをturnkに上げようとする
4月から懸案になっていた、このホストの 有料オプションにやっと加入しました。 毎月$3でsubversionやらgitやら使えるようになりました。Thanks SMJ!
というわけで、やっとtDiaryをtrunkに追随させようと作業を始めました。
現在のtDiaryのバージョンは、2.2.0.20080208、Rubyは ruby 1.8.7 (2008-06-20 patchlevel 22) [alpha-netbsd]です。
まずは動作している日誌のデータを退避しておきました。 index.rbと同じディレクトリのtdiary.confで@data_pathを変更するのとなるべく同時に 、 @data_pathの指す先のディレクトリを仮のものにmvしました。 この状態で閲覧すると、キャッシュディレクトリが無いとのエラー。 @data_path内のtdiary.confにあったキャッシュのパスも変更したら、 いつも通り閲覧できるようになりました。
次に、trunkのtDiaryがこれから先参照するための@data_pathを 退避したディレクトリから、cp -pRで作りました。
さて、やっと最新のtDiaryをcheckout。 SourceForgeの文書*1 を参考に、svn co https://tdiary.svn.sourceforge.net/svnroot/tdiary。 Over quota。これじゃbranchぜんぶもらって来ちゃいますから。
気を取りなおして、下記のようにしました。
設定は運用中のものからコピーします。 ../dというのが運用中の日誌のディレクトリ。
これで閲覧できるはず! これでアクセス。時間がかかってるよ。 topするとrubyががんばって動いてる。データの文字コードを変換してるんだろうな。 同じホストの他の皆さんごめんなさい〜。 …って、
ここで時間切れとなりました。後で見る。
*1 しかしSourceForgeのプロジェクトページは見にくくなったよね。
● [tDiary] スタイルをインストールし忘れる
さっきの続き。
まずはバックトレースを読んでみよう。 TDiaryLatest.newのなかで日を遡りながら日記のデータを読んでいくなかで、キャッシュが無い場合に、コメントを読み込む時に、コメントの行を(migrateしながら)読むか… ってキャッシュは消してみるべきだよね。…エラーは変化しない。 じゃあしかたないデバッグプリントをしこむ。
20090731の日記が無いことになってる。 実際には、この日は日記はあって、コメントもいただいている。 raiseの引数をdiaries.inspectをすると、空のままのハッシュだった。
デバックプリントをしながら追っていくと、 tdiary/defaultio.rbの223行目付近からのrestoreメソッドで、 237行目付近である日の日記に対してイテレータが動いているのはわかった。 しかし、イテレータを抜けた後のdiariesは空のまま。 240行目で制御がどこかに行ってしまう。 emptdiaryスタイルを入れてないのが問題のようだ。 227行目のbegin〜rescue〜endの枠をはずしてみると、 240行目で、「undefined method `new' for nil:NilClass (NoMethodError)」 がraiseされる。 本来は、これは、245行目でrescueされるはずなのだろうけれど、 raiseされているのはSyntaxErrorではない。 NoMethodErrorはNameErrorとしてもrescueされちゃうんだね。
styleメソッドはtdiary.rbの444行目に定義されていて、 知らないスタイルに対してはnilを返すので、 ここはNoMethodErrorだけをrescueすればいいだろう。
(メールアドレスは少しだけ難読化してあります。)
この状態で「emptdiary style not found (RuntimeError)」 が表示されるのを確認してから、
して、期待どおり(cssとか、まだ無い)日記が表示されるのを確認できた。
今日はtrunkのindex.rbにもホストの負荷リミットを入れておしまい。
おっと、上記ではだめでした。後ほどまとめなおします。
最近のツッコまれどころ