私は非常に奇妙な問題を抱えています。Rails ActiveRecord モデルのコレクションをデータベースから取得していますが、コレクションの最初のモデルにはモデルの属性/メソッドがなく、標準の ActiveRecord 基本メソッドのみがあります。残りはすべての属性を持っています。そして、Passenger を使用している実稼働の debian サーバーでのみこれを行っています。OS X と cygwin で動作します。
何か案は?
ありがとう、ケビン
私は非常に奇妙な問題を抱えています。Rails ActiveRecord モデルのコレクションをデータベースから取得していますが、コレクションの最初のモデルにはモデルの属性/メソッドがなく、標準の ActiveRecord 基本メソッドのみがあります。残りはすべての属性を持っています。そして、Passenger を使用している実稼働の debian サーバーでのみこれを行っています。OS X と cygwin で動作します。
何か案は?
ありがとう、ケビン
本番データベースのデータが不良である可能性があります。
ログレベルを上げ(本番環境ではSQLクエリをログに記録しません)、生成されているクエリを見つけてから、本番データベースを開いてクエリを実行し、何が返されるかを確認します。
問題は、SQL Server 2005 用の正しいバージョンの freetds を使用したくないということでした。30 文字を超える列名をサポートしていない古いプロトコル バージョンを使用していたため、呼び出している属性を見つけることができませんでした。切り捨てられていました。私のfreetds.confでそれを変更すると、問題が修正されました。トラブルシューティングに協力してくれたVladに感謝します。
デバッグを行わずにこれを確認することは困難ですが、調査を検討する可能性があることの 1 つは、スレッドの問題です。ActiveRecord は必要に応じてこれらのメソッドをオンザフライで定義すると思いますが、その過程で最初のモデルにアクセスしている可能性があります。同様の問題は、Ruby の "require" ステートメントでも発生する可能性があります。あるスレッドで何かが必要な場合、別のスレッドでアクセスしようとすると、クラスがまだ完全に定義されていない可能性があります。
コレクションの最初のモデルにモデルの属性/メソッドがないというのは、NoMethodError
それらのいずれかを呼び出そうとすると例外が発生するためですか?
モデル オブジェクトが属性メソッドを持たないのは通常のことです (たとえば、 の出力をダンプする場合object.methods
)、実際にそれらを呼び出そうとするまでは。問題の不足しているメソッドの 1 つを呼び出そうとすると、ActiveRecord
のmethod_missing
ハンドラーがトリガーされ、メソッド名がデータベースで定義された列の 1 つの名前と一致する場合、メソッドは動的に作成され、例外は発生しません。 . それが起こらない場合は、オブジェクトのクラスが間違っている (操作しようとしているモデルと一致しない) か、プラグインまたは gem がmethod_missing
ハンドリング チェーンの動作に問題があり、干渉している可能性があります。
ログ (ログ レベルに応じて、logger.info または logger.info) にダンプできますか? 本番環境とローカルにインストールされている gem (および対応するバージョン) の監査も実行できますか?