Bug suspicion
Closed this issue · 6 comments
しつもんです!
ビルドが安定->不安定を交互に繰り返すようですが、そういう現象ってないでしょうか?
雰囲気的に、play auto-testが上手く終了できてない感じですが、奇数回(1回目含む)が不安定、偶数回が安定してるので、なんか微妙です。
ログは:
・コンソール出力
・STABLE: http://dl.dropbox.com/u/7155864/play_auto-test_stable.txt
・UNSTABLE: http://dl.dropbox.com/u/7155864/play_auto-test_unstable.txt
・application.log
・STABLE: http://dl.dropbox.com/u/7155864/application_stable.log
・UNSTABLE: http://dl.dropbox.com/u/7155864/application_unstable.log
環境は:
・Play-1.2.1
・Jenkins 1.415
・Ubuntu 10.4 server(64bit)
・JDK6(本家の)
・https://github.com/katzchang/HelloPlay---yabe
あたりです。
遅くなりましたが、確認してみました。
Play-1.2.1
Jenkins 1.415
MacOSX 10.6.7
JDK6 1.6.0_24 (MacOSX付属のもの)
https://github.com/katzchang/HelloPlay---yabe
という環境で、Jenkinsのgitプラグインを使ってソースコードをcloneして実行してみましたが、ご指摘のような現象は今のところ確認できていません。
頂いたコンソール出力に
The application does not start. There are compilation errors.
とあるのが気になります。
これはPlayが実行時コンパイルに失敗したときに吐くログなのですが、奇数回は失敗して、偶数回は成功するというのと関係ありそうな気がしています。
本家のJDK6で試したらまた違うかも知れませんので後ほど確認してみます。JDKのリビジョンって何番か教えてもらえると嬉しいです。
解決しました。
Mercurial pluginをいれてたんですが、Ubuntu10.4の標準aptレポジトリから取れるMercurialが1.4で古く、ワークスペースに上手くcloneできなかったようです。コマンドラインではとりあえず問題なさそうだったので大丈夫かなーとおもってたんですが…。
で、Mercurialを1.8.4にしたら上手く動いているようです。
お騒がせしました&助かりました&ありがとう!
実は、その後再現してしまいました。現在は解決しています。
おそらくPlayフレームワーク側の問題だと思いますが、念のためお知らせしておきます。
現象的に今ひとつ不安定なので何とも言えませんが、Play Frameworkのtestrunnerモジュールで転んでいるようです。なので、原因を出力すべくメッセージの内容を変えて、ビルド&jarを配置し直したところ、なぜか問題が起こらなくなってしまいました。
「The application does not start. There are compilation errors.」のメッセージは、その辺りで例外をcatchして出しているのですが、どんな例外を出しているのか分からないという問題があり、現在のmasterでは例外情報含めて出力するように変更されています。
で、そいつを取り込んで自前でjarをビルドし、Play実行環境のそれっぽいjarと入れ替えたところ、問題なくauto-testが通るようになってしまいました。謎ですね…。
コンパイルエラーってことは、tmpの下にあるバイトコードキャッシュが古かったのかも知れないですね。
play clean してからauto-testすれば通ったのかも知れないです。
現象お聞きする限り、Play!の一時的なバグに起因する問題っぽいので、一旦閉じますね。
ありがとうございました。
フォローありがとうございます。
コンパイルエラーというログはtestモジュールが出しているようですが、実は不正確で(!)、
play.modules/testrunner.FirePhoque.main で java.net.ConnectException: ConnectionRefused が発生するのが原因です。
http サーバが起動する前にテストが走っているような状態?でしょうか。
例外のスタックトレースを残さず、Exceptionをキャッチしたら
何でも「コうンパイルエラーだ!」という文字を出していたという、アンチパターンの代表格でした。
仰る通りPlay!の問題だと思うので、プラグインの課題としては閉じるべきだと思います。
何かわかったら、どこかに書くかもしれません…。
こちらこそ、ありがとうございました。
例外のスタックトレースを残さず、Exceptionをキャッチしたら
何でも「コうンパイルエラーだ!」という文字を出していたという、アンチパターンの代表格でした。
Playはところどころコードひどいですからね。。
FirePhoqueがConnectionRefusedでこけてるなら、おっしゃるとおり、アプリが立ち上がる前にTestRunnerが走り出しちゃってるせいですね。。
PythonのPlayスクリプトを読むと分りますが、auto-testコマンドは確かlogs/system.outの文字列を監視してアプリの起動を確認してるんですよね。
これがとても不安定で、log4jの設定を誤ると一生system.outにログが出なくなってauto-testが動かなくなるし、逆に何かのあやでsystem.outに、以前のログが消えずにそのまま残ってると、アプリの起動より先にTestRunnerが走りだしたりと、色々おかしいんです。。
ここは昔僕もはまったんですが、気をつけて設定するようになって問題に遭遇しなくなってたので、忘れてました。。