4

私は現在、主にバックエンド データ ストレージに Google Cloud SQL (SQL Alchemy を使用) を使用する Google App Engine (Python) プロジェクトに取り組んでいます。

ほとんどの場合、すべてが完璧に機能します。ただし、「何か」がうまくいかず、奇妙な例外が発生することがあります。例えば:

  • AttributeError: 'ColumnProperty' オブジェクトに属性 'strategy' がありません

  • AttributeError: 'RelationshipProperty' オブジェクトに属性 'strategy' がありません

これは、新しい GAE インスタンスのスピンアップに関連している可能性があると考えていますが、確実ではありません。

以上のことを踏まえて、私の質問はこれです。私のチームと私がこの問題を追跡するために使用できる戦略は何ですか?

アプリケーションは Google App Engine で実行されているため、オプションが少し制限される可能性があることに注意してください。

更新:以下の Owen Nelson のコメントは正しいです。threading.RLockGoogle の提案に従って追加しました。ただし、この問題はまだ発生していますが、それほど頻繁ではありません。

はっきりさせておきたいのですが、これまでのところ、ローカル環境でこの問題を再現することはできませんでした。これは、動的インスタンスのスピンアップと関係があると確信していますが、それは開発中に実際にできることではありません。

4

1 に答える 1

1

私が理解していることから、あなたのアプリケーションには本番モードでのみ問題があります。

開発モードでバグを再現してみてください

最善の解決策は、開発モードでそのバグを再現できるようにすることです。これを行うには、大量のデータを使用して unittest のバッチを実行してみてください。( appengine でローカル テストを行う方法を参照してください)。

それがうまくいかない場合...

appstats をオンにして、ハンドラーに関する詳細情報を取得します

appstats をオンにして、現在問題を引き起こしているハンドラーに関する情報を取得してみることができます。Appstatsは通常、データストアに関する情報を提供します。これは私たちの場合には関係ありませんが、一般的なリクエストから情報を取得できます (応答時間など)。

ハンドラーを識別し、それを美しい try キャッチでラップします

問題の原因または問題が発生した場所を特定したら、それを try..catch. で囲むことができます。これにより、現在の実行トレースに関する詳細情報を取得し、うまくいけば問題を解決できます。

于 2012-12-06T23:38:09.730 に答える