【问题标题】:Python 2.7 App executing as CGI instead of WSGI on App EnginePython 2.7 应用程序在 App Engine 上作为 CGI 而不是 WSGI 执行
【发布时间】:2012-05-18 11:10:55
【问题描述】:

以下代码生成 CGI 方法而不是 WSGI,如下面的日志所示。这是开发服务器上 WSGI 应用程序的正常执行吗?如果不是,需要改变什么才能让应用程序作为 WSGI 执行?

main.py

import webapp2
import wsgiref.handlers
import logging
from google.appengine.api import users


class HomeHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("Hi World")

app = webapp2.WSGIApplication([
    (r'/', HomeHandler),
], debug=True)

app.run()

app.yaml

application: WSGITEST
version: 1
runtime: python27
api_version: 1
threadsafe: yes

libraries:
- name: webapp2
  version: latest

handlers:
- url: /.*
  script: main.app

日志

DEBUG    2012-05-09 21:31:14,921 dev_appserver.py:656] Matched "/" to CGI dispatcher with path main.app
DEBUG    2012-05-09 21:31:14,926 dev_appserver_import_hook.py:1246] Enabling webapp2: None
DEBUG    2012-05-09 21:31:14,928 dev_appserver.py:1624] Executing CGI with env:
{'REQUEST_ID_HASH': '77DE68DA', 'SERVER_SOFTWARE': 'Development/1.0', 'SCRIPT_NAME': '', 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/', 'SERVER_PROTOCOL': 'HTTP/1.0', 'QUERY_STRING': '', 'CONTENT_LENGTH': '', 'USER_ID': '', 'APPENGINE_RUNTIME': 'python27', 'TZ': 'UTC', 'SERVER_NAME': 'localhost', 'REMOTE_ADDR': '127.0.0.1', 'SDK_VERSION': '1.6.5', 'PATH_TRANSLATED': '/home/bear/dev/appengine/code/ae-baseapp/401/main3.app', 'SERVER_PORT': '8080', '_AH_THREADSAFE': '1', 'CURRENT_VERSION_ID': '1.1', 'USER_ORGANIZATION': '', 'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0', 'HTTP_HOST': 'localhost:8080', 'HTTP_CONNECTION': 'keep-alive', 'USER_EMAIL': '', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'APPLICATION_ID': 'dev~WSGITEST', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_DNT': '1', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', '_AH_ENCODED_SCRIPT_NAME': '/', 'AUTH_DOMAIN': 'gmail.com'}
INFO     2012-05-09 21:31:14,933 dev_appserver.py:2891] "GET / HTTP/1.1" 200 -

【问题讨论】:

  • 如何运行你的 sdk?复制粘贴此代码不会产生声明其使用 CGI 执行的行

标签: google-app-engine cgi wsgi


【解决方案1】:

首先,您应该删除这行代码,因为它是incorrect

app.run()

正如我在评论中所写并由aschmid00 指出的那样,可能是旧的调试语句。

【讨论】:

  • 你确定吗?如果您在启用线程安全的 py27 中运行 app.run() 不会有任何影响...但我可能错了。
  • @aschmid00 你可以通过运行dev_appserver.py . --debug 获得调试输出 // 我认为它不会运行代码两次,因为那样会产生 Hi World Hi World 的响应,而我得到的只是一个嗨世界
  • @systempuntoout - 删除 app.run 不会将执行模式从 CGI 更改为 WSGI。在您的应用程序上使用 --debug 并检查它们是否显示为 WSGI。
【解决方案2】:

这个日志是一个硬编码的字符串:

/usr/local/google_appengine/google/appengine/tools/dev_appserver.py:
 1622      sys.modules['__builtin__'] = __builtin__
 1623  
 1624:     logging.debug('Executing CGI with env:\n%s', repr(env))

【讨论】:

  • 喜欢假设,我的假设是 Google 会记录 WSGI 与 CGI!
猜你喜欢
  • 2012-05-13
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
相关资源
最近更新 更多