2


0

KeyError( "name%s already used"%model_name)を発生させるapp-engine-rest-server

プロジェクトaphttp://code.google.com/p/appengine-rest-server/ [pengine-rest-server]で遊んで、既存のすべてのモデルのREST Webサービスを作成しています。 ブラウザーに最初に照会したときに奇妙なエラーが発生しました:http:// localhost:8080 / rest / metadata / user、それは私に結果を与えます:

      −

      −

      −

しかし、ページを更新すると、このエラーが発生します:

  Traceback (most recent call last):
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3185, in _HandleRequest
      self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3128, in _Dispatch
      base_env_dict=env_dict)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 515, in Dispatch
      base_env_dict=base_env_dict)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2387, in Dispatch
      self._module_dict)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2297, in ExecuteCGI
      reset_modules = exec_script(handler_path, cgi_path, hook)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2195, in ExecuteOrImportScript
      script_module.main()
    File "/Users/foo/Documents/AppEngine/helloworld/main.py", line 48, in main
      rest.Dispatcher.add_models({"user": UserModel})
    File "/Users/foo/Documents/AppEngine/helloworld/rest/__init__.py", line 845, in add_models
      cls.add_model(model_name, model_type)
    File "/Users/foo/Documents/AppEngine/helloworld/rest/__init__.py", line 863, in add_model
      raise KeyError("name %s already used" % model_name)
  KeyError: 'name user already used'

誰かがなぜそれが起こるのか説明をくれますか? サーバーを再起動し、再度ブラウザーで実行すると、xmlの結果が表示されますが、更新するとエラーが発生します。 それはappengine-rest-serverアプリケーションのバグですか、それとも私のコードにありますか? 私のhelloworldアプリケーションは、http://www.megafileupload.com/en/file/217235/helloworld-zip.html [こちら]からダウンロードできます。

1 Answer


3


main()`関数があるため、App Engineはモジュールをキャッシュしてインポートします。 したがって、同じランタイム内で、 `add_models()`を複数回呼び出すことができます。 `rest`初期化コードをモジュールレベル(または、 main() `を呼び出すたびにではなく、モジュールの初期化中に1回呼び出される関数に)に移動すると、動作するはずです。