私のGAEPythonアプリには、さまざまなカスタムフィールドを持つ「ユーザー」と呼ばれる種類があります。最近、アプリが一晩中アクティビティを行わない場合、翌朝ログインしようとするとエラーが発生します。
ログイン中に、データストア内のエンティティのkey_nameであるID(Facebookから)を取得します。
user = User.get_by_key_name(id_from_facebook)
logging.debug(user.favorite_color)
返されるエンティティは実際にはGoogleライブラリのクラスであり、フィールド「favorite_color」がないため、これによりエラーが発生します。ただし、データストアから「何か」を取得しているため、オブジェクトの内容を確認しました。
for key in user.__dict__.keys():
log.debug("%s: %s" % (key, user.__dict__[key]))
これは、「_ first_name」、「_ last_name」、「_ email」など、私の「ユーザー」の種類ではないキーを示しています。
また、ファイルの先頭ではなく、メソッド内の「myapp.models」からクラスをインポートしようとしましたが、何も変わりませんでした。ただし、GAEで実行されているインスタンスをシャットダウンし、アプリに再度アクセスして新しいインスタンスを開始すると、正常に動作します。
私の唯一の手がかりは、私のアプリがインポートするものとGAEがインポートするものの間に矛盾があると聞いたことですが、それ以外は何もありません。すべてのユーザーを新しい一意のタイプ(「MyUser」など)にコピーする以外にできることはありますか?
編集:
望ましくないクラスは、実際には私のプロジェクトにもあるKayFrameworkの「User」であることがわかりました。ただし、そのクラスはコードのどこにもインポートしません。特に、エラーが発生しているモジュールにはインポートしません。