2

Webapp2に問題があります。app.yamlに異なるPythonファイルを指すURLのハンドラーを配置すると、次のエラーが発生します。

ERROR    2012-10-06 16:44:57,759 wsgi.py:203] 
Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 195, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 250, in _LoadHandler
    __import__(cumulative_path)
ImportError: No module named application

私のapp.yaml:

application: [[app's name]]
version: 1
runtime: python27
api_version: 1
threadsafe: yes

inbound_services:
- mail

handlers:

- url: /send
  script: email.application

- url: /_ah/mail/update@sitdown-standup.appspotmail.com.*
  script: email.application

- url: /.*
  script: SDSUmodels.application

libraries:
- name: webapp2
  version: "2.5.1"

SDSUmodels.pyは次で終わります:

application = webapp2.WSGIApplication([('/info', MakeBasicInfo)], 
                                   debug=True)`

そしてemail.pyは次で終わります:

application = webapp2.WSGIApplication([('/request', Request_update),
                                   ('/send', Send_report),
                                   (Receive_email.mapping())], 
                                   debug=True)`

これらの行を削除すると

- url: /send
  script: email.application

app.yamlから、エラーは停止しますが、これにより、特定のファイルにURLを指定する方法がなくなります。

この質問でこれを処理するいくつかの代替方法を見ることができますが、なぜこのアプローチが機能しないのか疑問に思いました。以前、別のプロジェクトの古いWebアプリケーションバージョンでこれを実行しましたが、機能しました。詳細は以下のとおりです。

app.yaml:

application: [[other app's name]]
version: 1
runtime: python
api_version: 1

handlers:
- url: /stylesheets
  static_dir: stylesheets

- url: /twitter
  script: twitter.py

- url: /_ah/mail/kindle@shelvdtracker.appspotmail.com.*
  script: kindle.py

- url: /.*
  script: web.py

inbound_services:
- mail

twitter.pyは次で終わります:

application = webapp.WSGIApplication(
                                     [('/twitter', Process_new_DM)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()
4

1 に答える 1

3

email同様に名前が付けられた標準ライブラリがあります。ローカルモジュールが見つかる前にロードされています。

モジュールの名前を別の名前に変更すると、機能します。

于 2012-10-06T17:21:38.913 に答える