【问题标题】:Error running using web.py on Google App Engine - application instance has no __call__ method在 Google App Engine 上使用 web.py 运行时出错 - 应用程序实例没有 __call__ 方法
【发布时间】:2013-08-25 00:47:42
【问题描述】:

我一直在尝试使用 web.py 在 Google App Engine 上运行一个简单的网络应用程序,但遇到了一些非常基本的错误。我已经搜索了该网站,但没有找到任何可以解决我的问题的东西。这是我要运行的代码的大纲:

import web

urls = (
    "/","Index"
)

app = web.application(urls,globals())
render = web.template.render('pages/', base="layout")

class Index:
    def GET(self):
        #code...

if __name__ == "__main__":
    app.cgirun()

这是 app.yaml 代码:

application: #appname
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: home.app
- url: /static
  static_dir: static

但后来我在日志中得到了这个:

2013-08-22 06:11:13 Running command: "['C:\\Python27\\pythonw.exe', 'C:\\Program     Files\\Google\\google_appengine\\dev_appserver.py', '--skip_sdk_update_check=yes', '--port=8080', '--admin_port=8000', 'C:\\.....\\root\\home-gae']"
INFO     2013-08-22 06:11:16,956 devappserver2.py:557] Skipping SDK update check.
WARNING  2013-08-22 06:11:16,976 api_server.py:317] Could not initialize images API; you are likely missing the Python "PIL" module.
INFO     2013-08-22 06:11:17,006 api_server.py:138] Starting API server at: http://localhost:64510
INFO     2013-08-22 06:11:17,013 dispatcher.py:164] Starting module "default" running at: http://localhost:8080
INFO     2013-08-22 06:11:17,019 admin_server.py:117] Starting admin server at: http://localhost:8000
ERROR    2013-08-22 10:11:24,303 wsgi.py:235] 

Traceback (most recent call last):

  File "C:\Program Files\Google\google_appengine\google\appengine\runtime\wsgi.py", line 223, in Handle

    result = handler(dict(self._environ), self._StartResponse)

AttributeError: application instance has no __call__ method

INFO     2013-08-22 06:11:24,313 module.py:593] default: "GET / HTTP/1.1" 500 -

AttributeError 让我感到困惑,因为在 web/application 模块中似乎确实有一个调用方法。有任何想法吗?任何想法将不胜感激。

【问题讨论】:

    标签: google-app-engine web.py


    【解决方案1】:

    首先,您的 app.yaml 有一点问题。你需要把你的静态处理程序放在包罗万象的处理程序之前:

    handlers:
    - url: /static
      static_dir: static
    - url: /.*
      script: home.app
    

    否则,您将无法提供静态文件。

    为了解决您的网站无法加载的问题,开发服务器似乎正在尝试将您的 CGI 应用程序视为 WSGI 应用程序。尝试将您的home.py 文件适合the official example for web.py on GAE。也就是说,去掉 if __name__ == "__main__:" 部分并简单地将其替换为:

    app = app.gaerun()
    

    【讨论】:

      【解决方案2】:

      我找到了解决办法。

      import web
      
      urls = (
          "/.*", "hello"
      )
      
      application = web.application(urls, globals())
      #app = web.application(urls, globals())
      
      class hello:
          def GET(self):
              return "HelloWorld"
      
      #app = app.gaerun()
      #app.cgirun()
      app = application.wsgifunc()
      

      使用“app = application.wsgifunc()”,那么代码就可以正常运行了。

      【讨论】:

        猜你喜欢
        • 2014-03-11
        • 2020-09-26
        • 2013-12-20
        • 1970-01-01
        • 2021-06-12
        • 2011-04-09
        • 2018-05-04
        • 1970-01-01
        • 2012-11-21
        相关资源
        最近更新 更多