App Engine Python 设置

0 投票
2 回答
514 浏览
提问于 2025-04-16 06:42

<< 下面的大更新意味着这只是一个日志问题 >>

我正在尝试用 Python 设置应用引擎,但遇到了一些问题,我怀疑是我漏掉了某个简单的步骤。我的 app.yaml 文件是这样的:

application: something  #name here is the one I used to register i.e. something.appspot.com
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
  script: myapp.py

而我的 myapp.py 文件是这样的:

import cgi
import Utils
import Sample
import logging

from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db

class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.out.write('<html><body>')
        self.response.out.write('Welcome to my server! Why is this not working?')
        self.response.out.write('</body></html>')

def main():
    application = webapp.WSGIApplication([('/', MainPage),
                                        ('/Sample', Sample.HttpRequestHandler)],
                                        debug=True)

    run_wsgi_app(application)

if __name__ == "__main__":
    main()

当我在本地运行这个时,输入 / 可以看到我的 HTML "欢迎" 消息,但当我输入 /Sample 时却没有任何反应。此外,我似乎也无法记录日志。我调用 logging.debug(),但在日志控制台上什么都没有显示。有没有什么想法?这是我的 Sample.py。抱歉,缩进有点奇怪。复制粘贴的时候没有对齐,手动编辑也没能纠正。

class HttpRequestHandler(webapp.RequestHandler):
    def get(self):

        Utils.log("Sample handler called")

        try:
            if HttpRequestHandler.requestIsValid(self):

            intParam = int(self.request.get('param1'))
            floatParam = float(self.request.get('param1'))
            stringParam = self.request.get('param1')

            Utils.log("params: " + str(intParam) + " " + str(floatParam) + " " + stringParam)

            if intParam == 1:
                self.response.set_status(200, message="Success")
            else:
                self.response.set_status(400, message="Error processing sample command")

            else:
            raise StandardError

        except Exception, e:
            logging.debug("Exception: %s" % (e))
            self.response.set_status(400, message="Error processing sample command")

    def requestIsValid(self):
        if self.request.get('param1') != "" and \
        self.request.get('param2') != "" and \
        self.request.get('param3') != "":
            return True
        else:
            return False

我知道这样做有点傻,但因为我看不到任何日志消息,我就随便加了一堆 "raise StandardError" 的调用,只是想看看在我尝试调用 Sample 消息时,浏览器窗口会显示什么异常输出。我发现服务器似乎正常调用了 Sample 处理程序,甚至检查 int 参数也没问题。

我觉得问题在于我根本看不到我的日志消息!有没有人知道为什么它们不显示?我通过那些 Util.log() 调用来调用 logging.debug()。是不是有什么标志或者设置让我的输出在日志控制台上不显示?

2 个回答

0

你没有为 "/Sample" 这个路径创建一个 RequestHandler 的子类,就像你为 "/" 这个路径创建了 MainPage 一样。

要查看日志,你可以用 dev_appserver.py 启动你的 SDK 应用服务器,然后看看它输出的日志,或者在 Google App Engine 启动器的界面中点击日志按钮。

0

我发现确实是个日志问题(下面的东西都运行得很好)。我使用的是Google App Engine Launcher,所以我在设置中做了以下调整来让它正常工作:

进入编辑 -> 应用设置

在额外标志下添加标志 -d

我还选择了在启动时清空数据存储,但我觉得这对日志没有影响。

撰写回答