tDiary 2.2.1へアップデート

tDiaryを2.0.4のまま長いこと放置していたので、ようやく重い腰をあげて2.2.1へアップデートを掛けてみました。しかしながらあちこち火を噴いてえらく大変なことになってしまいました。ほとんど今日1日を使い果たしてしまったような感じです。
まず、index.rbがうまく動かなくて以前書いた日記すらまともに表示できないという状態になり、しかもブラウザのキャッシュが悪さをしたのか部分的に正しく動いていたりうまく動かなかったりといった症状が出て、対処するのに時間が掛かってしまいました。実行時に使用するRubyのファイルがあちこちのディレクトリにあって、それらを全部正しく新しいバージョンに更新しないと動いてくれないので、古いバージョンが一部に残っていて問題を起こしていたように思えます。結局どの操作が決め手になってうまく動き出したのかは理解できないので、推測でしかないのですが。諦めて元のバージョンに戻そうとしたこともありましたが、その時にもまた新しいバージョンのファイルが一部に残っていたようで正しく動かないという…。退路を絶たれた状態で新バージョンへの移行をすることになりました。
20時過ぎになってやっとindex.rbはどうやら動いているということを確認。しかし新規の投稿の際に、入力した文章を正しく解析してくれなくて全部セクション名につないで表示してしまうという問題が発生して困惑。これはしばらく悩んだ後、新しく導入されたWiki文法で投稿を処理する機能が有効になっているせいであると気付いて、あちこち調べてそれに関する部分を取り外して元通りの文法で記述できるようにしました。
最後まで残ったのが、RSSを正しく生成してくれないという問題でした。これは結構難関でした。できているrdfファイルを調べてみると、UTF-8で吐き出されるべきフィードがJISになっているという…。他人の書いた、しかもRubyというなかなか読みづらい(Perlほどではないが…)makerss.rbのコードを頑張って読んで、どこでどういう変換処理をしているのかをようやく突き止めました。新バージョンではRuby 1.8.2で導入されたto_utf8というメソッドを使っていて、私の使っているレンタルサーバがRuby 1.8.1なのでうまく動かなかったという次第です。それでなぜJISになってしまうのかは謎ですが。ちょっと検討して、tDiary 2.0.4用のmakerss.rbの実装を参考にして昔のuconv.soをrequireするやり方に一部書き戻してやりました。これでどうにかRSSも復活しました。いろいろ調べているうちに一旦RSS用のキャッシュを消してしまったので、この記事を投稿した時点で3件しかフィードが書き込まれていないですが、1週間もすれば元通りでしょう。
RSSフィードについてはこれまで、新しい方の記事を非表示にした時に、単にRSSの当該記事を消してしまうのではなく、ちゃんと必要な件数が常時RSSに表示されているように、それより1件古い記事のフィードがRSSに戻ってくるのにとても感心していたのですが、今回コードを読んでその仕組みを理解しました。新しい記事やコメントが来ると、データディレクトリに一旦書き出してキャッシュしておき、そのキャッシュの中で一番新しいものから順に一定件数をRSSに変換して出力しています。キャッシュの件数はデフォルトで50件。この仕組みであれば、かなり沢山の記事を非表示に変更してしまうとやがては尽きてしまいますが、日常的な操作をしている分には常に新しい方から順に記事のフィードが生成される仕組みですね。キャッシュをしているのだろうと推測はしていましたが、確かにそうだよなと思いました。自分が実装しろと言われてもこういう仕組みを考えはするのでしょうけれど。




この記事へのコメント

この記事へのトラックバック