zomです。
もうね、ぐったりするほどハマったので、他にもハマった人がいると思い投稿します。
【2014/04/05追記】
※4.0.40では元に戻っていたのでタイトルなどバージョンについて細かく追記しました。
ちょっとsinatraでWebAPIでも作ろうと思い、お遊びPCでApache×Passenger4.0.0RC4×Ruby2.0.0で環境作ってみようと思いました。
で、Ruby2.0.0をインストールしPassengerもインストールし(ここらへんは後日別エントリで投稿します!たぶん!きっと!)
開発ができるようにはなりました。
しかし、プログラムをなにか変更をするたびにサーバ再起動を要します。
これでは、Apache何百回再起動することになるねん、ということで
rackアプリケーションのルートディレクトリにtmp/restart.txtというのをtouchで作成してやればいいとのことです。
まー、そこらへんはpassenger restart.txtとかでググれば山ほど情報が出てくるので詳しくは書きません。
で、いちいちtouchするのもメンドいということで用意されているのが「always_restart.txt」というのがあります。
これはそのファイルがありさえすれば、毎回キャッシュを見ないみたいな挙動をしてくれます。
がっっっっっっっっ
肝心のこいつが効いてくれません!!!!Passenger4.0.0RC4だと!!!!
さて、先に解決方法をば。
rackアプリケーションのルートディレクトリ直下にalways_restart.txtを置くだけ。
効かなかった人、Passenger4.0.0RC5でもかな?これで行けると思います。
やってみてください。
さて、なんでディレクトリが変わっているのか?
Passenger3.0.x系のソースから抜粋。
1 2 3 4 5 6 7 8 9 10 |
if (options.restartDir.empty()) { restartDir = appRoot + "/tmp"; } else if (options.restartDir[0] == '/') { restartDir = options.restartDir; } else { restartDir = appRoot + "/" + options.restartDir; } string alwaysRestartFile = restartDir + "/always_restart.txt"; string restartFile = restartDir + "/restart.txt"; |
Passenger4.0.0RCのソースから抜粋。
1 2 3 4 5 6 7 |
if (options.restartDir.empty()) { restartFile = options.appRoot + "/tmp/restart.txt"; alwaysRestartFile = options.appRoot + "/always_restart.txt"; } else { restartFile = options.restartDir + "/restart.txt"; alwaysRestartFile = options.restartDir + "/always_restart.txt"; } |
というわけでですね、3系では、特定のディレクトリの下にalwaysもrestartも置きますよ、という実装から
4.0.0RCではディレクトリを指定しなかった場合はルートディレクトリ直下にalways、ルートディレクトリ/tmpの下にrestart、という謎実装に変わってるのが原因でした。
これバグなのかな?issueに上げていいかどうかの判断がつかないけど、ドキュメントでカバーできる範囲だからそうでもないのかなー、というのが自分の意見です。
もし英語に堪能な人がいたら作者の方に、意図とか訊いてみてください><
すでにどこかに書いてあるのかもだけど…。
これで三日ほど何もできなかった…
【2014/04/05追記】
passenger4.0.40で挙動が変わってたっぽいのでソースを見てみたらtmpの下に戻ってました。
1 2 3 4 5 6 7 8 9 10 |
if (options.restartDir.empty()) { restartFile = options.appRoot + "/tmp/restart.txt"; alwaysRestartFile = options.appRoot + "/tmp/always_restart.txt"; } else if (options.restartDir[0] == '/') { restartFile = options.restartDir + "/restart.txt"; alwaysRestartFile = options.restartDir + "/always_restart.txt"; } else { restartFile = options.appRoot + "/" + options.restartDir + "/restart.txt"; alwaysRestartFile = options.appRoot + "/" + options.restartDir + "/always_restart.txt"; } |
4.0.0のRCがなくなったときもtmpの下じゃなくなってたはずなのに、結局元鞘ですかね?なんだったのか。