tracのアップデートを行って動かなくなった時の対処法

1. 始めに

tracのアップデートを行ったら動かなくなった。
ミスった。かなりミスった。
このアップデート中に実は編集中のユーザがいて、コメントを記述し終えてpostで内容を送信した時に問題が発覚。
おかげさまで送信すべきコメントの内容が紛失されてしまった。ブラウザからpostを再送したりしてみたけれどその内容は見つからず、ダメでした。ごめんなさい。

2. エラーの内容

tracのトップページを開くとエラーが出てきてしまう。そのエラーの画面は以下の通り。

tracのアップデートを行って出てきたエラー画面
tracのアップデートを行って出てきたエラー画面

エラーの内容の内メインのものは下記の部分と推測する。

The environment options "TRAC_ENV" or "TRAC_ENV_PARENT_DIR" or the mod_python options "TracEnv" or "TracEnvParentDir" are missing. Trac requires one of these options to locate the Trac environment(s).

どうやら、”環境変数である TRAC_ENV 若しくは TRAC_ENV_PARENT_DIR がmod_pythonのオプションである TracEnv または TracEnvParentDir と異なっていますよ。 Tracはこれらの内一方をTracの環境(ファイルシステムのパスをTracの環境と呼んでいるみたい)として必要とします。”

つまりこの環境変数が定義されてない、ってことらしい。

過去の記事を見てみると、インストール後に設定した環境変数があるらしい。
この修正はtrac.fcgiへ修正を加えるものだ。trac.fcgi は FreeBSDでportsからインストールしたものであれば /usr/local/share/trac/cgi-bin/trac.fcgi にある。
先の記事を元に trac.fcgi を見てみると、どうやら修正した箇所が消えている。恐らくアップデートでこのファイルが上書きされてしまい環境変数が消えてしまったのだろう。以下のように修正する。

shell> sudo ee /usr/local/share/trac.fcgi
import os
os.environ['TRAC_ENV'] = "/usr/local/share/trac"
os.environ['PYTHON_EGG_CACHE'] = "/tmp"

さて、それでも動かない。

3. 動かない、ように見えたのだけれど・・・

trac.fcgi を設定すれば動くようになるはず、と思っていたのだけれど動かなかった。
エラーメッセージからしてもTRAC_ENVが与えられてない(一致しない)のがエラーです、と言っているので先の修正は正しいと思えたのだけれど、それでもうまくいかない。
apacheのconfにTracEnvを追加することも試してみた。でもうまくいかない。
マルチリポジトリを公式にサポートするようになって、その運用方法によっては必要となってくる環境変数、 TRAC_ENV_PARENT_DIR も設定したけれどダメ。
と、そうこうしているうちに動いた!
結論から述べると、2. で修正したtrac.fcgiの内容のみで修正は全てだった。
ではなぜ動かなかったのか、ちょっと試してみた。すると動くようになる基準がわかった。

  1. trac.fcgiに対して上記の通り、”TRAC_ENV”を設定する。
  2. apacheを再起動する
  3. ブラウザで再度アクセスする。このときキャッシュクリアを行わなければならない。FireFox7ではShift+再読込ボタンで行う。

このとき特に気づかなかったハマりポイントは、3番のキャッシュクリア。コレを行わないと延々とエラーメッセージが出続けることになってしまった。おかげさまでどうすれば直るのかがサッパリわからなかった。

さて何となくわかったような気がした原因を述べてみる。

  • apacheが起動した状態で一度でもtrac.fcgiを読み込ませるとダメ。”trac.fcgiを読み込ませること”、とは、トラックのどこかのページにアクセスすること。こうするとどうやらapacheはtrac.fcgiをキャッシュしてしまう様子。(fcgiってapacheとは別にプロセスが立つんじゃないかなとか思ってたけど、このホストでは違うみたい。よくわかってなかったり)
  • キャッシュをクリアするにはapacheを再起動すること。再起動しない限りTRAC_ENVの環境変数を読んでくれない。ちょっと不思議な点は、今回のケースだとtracの利用中にアップデートによりtrac.fcgiが書き換えられてしまった。先の原因だとすれば正常なTRAC_ENVの環境変数はその値を定義するコードとしてキャッシュされるべきであり、エラーを起こさないはず。そして次回、いつのときかapacheが再起動されたときにこの変数が読み出せなくなりエラーがでる、のではなかったのかな。この状況にはならなかったでキャッシュ機構があるのかどうかわかんない。なのでココは勝手な推測。
  • そして最後の部分のブラウザをShift+再読込、させる必要があること。この必要性もよくわからない。ただ、表示されているエラーメッセージにCookieどうのこうの、って書かれたり書かれなかったりするので、その辺の関係なのかな。ただ結論的にとにかく言えることは、キャッシュクリアで読み込ませないとエラーが直らない、ってこと。

4. まとめ

tracをアップデートするときには気をつけましょう。
特にconf部分ではないtrac.fcgiを手動で書き換えているので、次回以降のアップデート時にもまず間違いなく同じエラーがでると予測される。

コメントを残す