英語で書いてあるということは、すでにJRubyのチケットとかにfileされてたり
します?あるいは、これから、という予定でしょうか。
また中身のほうですが、ActiveRecordのバージョンが2.2.0となっていますが、
rubygems.orgにはそのようなバージョンがないようです。2.0.2でしょうか。あ
るいは開発バージョン?例外の上がっている場所の行数を見たいので、正確な
バージョンを教えてください(gitのタグでもOKです)。
ありがちなのは、マルチスレッドでクラスの再定義中にアクセスして、メソッド
や定数が見つからなくてNoMethodErrorやNameError、というのがありがちです。
これは、マルチスレッド環境下では、以下のタイミングで発生します。
1. Railsのdevelopmentモードでは、アクセスの度にクラスを再定義するため、
発生する(ファイルが更新された場合のみ、だったかも?)
2. Railsはproductionモードでも、クラスを最初のアクセス時に遅延読み込み
するため、アプリの起動直後に発生する。
どちらかが当てはまる可能性はありますか?
また、JRubyの起動オプションに-Xbacktrace.style=rawを渡してエラーを発生さ
せ、より詳細な例外情報を取得することは可能でしょうか。Railsでどうやるの
かわかってませんが。。。
/ / /
なお、1についてはCRubyでも同様(ただしマルチスレッドで使う人が居ないので
表面化しない)で、Rails側の対処が必要です。autoloadを直したりという支援
をしているのですが、Rails側でマルチスレッドに興味のある人が少ないため
か、当面直る気配はなさそうです。
2についてはJRubyの問題で、master branchでは修正しました。次のリリースの
1.7では直るはずです。
以上です。
了解です。
ところで、動作中、複数アクセス同時の際に発生しているかどうか、など、わか
りますか?例えば複数ブラウザで同時アクセスしまくると発生しがち、など。
また、will_paginateというpluginが使われているようですが、こいつのバー
ジョンは何でしょうか。こいつがThread-safeでない、というパターンも考えら
れます。
>> また、JRubyの起動オプションに-Xbacktrace.style=rawを渡してエラーを発生さ
>> せ、より詳細な例外情報を取得することは可能でしょうか。Railsでどうやるの
>> かわかってませんが。。。
こちらもよろしくお願いします。
なるほど。
>> また、will_paginateというpluginが使われているようですが、こいつのバー
>> ジョンは何でしょうか。こいつがThread-safeでない、というパターンも考えら
>> れます。
>
> 2.3.4になります。
> こちらでもソースを見てみます。
再度よく見たところ、will_pagenateは単にmethod_missingを横取りしていただ
けでした。ActiveRecord::BaseにFinderをincludeとか、無茶だなあ。
というわけで元に戻って、怪しいのはActiveRecordですね。2.3.14のソースコー
ド見ると、既に派手に書き換わっているんですが、特にThread絡みの修正、とい
うコミットメッセージは見当たらないようです。するとJRubyか。。。
とりあえず、bugs.jruby.orgにチケットを登録しておいてもらえませんでしょう
か。おそらく「バージョンアップして再現させてね」と言われておしまいです
が、万が一同じ現象にぶち当たっている人が居れば、何かコメントもらえる可能
性はあります。
とりあえず、bugs.jruby.orgにチケットを登録しておいてもらえませんでしょう
か。おそらく「バージョンアップして再現させてね」と言われておしまいです
が、万が一同じ現象にぶち当たっている人が居れば、何かコメントもらえる可能
性はあります。