22

我曾尝试从 Python 2.5 迁移到 Python 2.7,但每次都遇到相同的错误。

我在 Python 2.5 中使用 app.yaml 文件和一个脚本 main.py 做了一个非常简单的测试,它工作正常。脚本只是一个 Hello World 类型来检查一切工作正常。

应用程序.yaml

application: sparepartsfinder
version: 1
runtime: python
api_version: 1


handlers:

- url: /blog
  script: main.py

- url: /blog/new_entry
  script: main.py 

主文件

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Hello, webapp World!')

application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                      ('/blog', MainPage),
                                      ('/blog/new_entry',MainPage),
                                      ('/blog/archive/.*',MainPage)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

当我更改为 Python 2.7 时,我会按照Google App Engine上的文档对app.yaml 和 main.py 脚本进行更改。

应用程序.yaml

application: sparepartsfinder
version: 1
runtime: python27
api_version: 1
threadsafe: true


handlers:

- url: /blog
  script: main.py

- url: /blog/new_entry
  script: main.py 

- url: /blog/archive/.*
  script: main.py


- url: .*
  script: main.py

主文件

import webapp2

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.out.write('Hello prueba!')

app = webapp2.WSGIApplication([('/', MainPage),
                               ('/blog', MainPage),
                               ('/blog/new_entry',MainPage),
                               ('/blog/archive/.*',MainPage)],
                              debug=True)

不幸的是,它在本地或当我尝试将新配置上传到 Google App Engine 时都不起作用。(我总是犯同样的错误)。

我可能会在 Windows XP 上理解我的机器(我同时拥有 Python 2.5 和 2.7)中的问题,但在我上传时却没有。

这是错误:

2012-05-04 13:02:07 运行命令:“[u'C:\Python25\python2.5.exe', '-u', 'C:\Archivos >de programa\Google\google_appengine\appcfg.py ', '--no_cookies', u'--email=salvador.sanjuan@gmail.com', '--passin', 'update', 'C:\Documents and Settings\SSanjuan\Mis documentos\Dropbox\Dropbox\ Python\SpareParts']" 解析 yaml 文件时出错:对象无效:无法使用 CGI 处理程序启用线程安全:“C:\Documents and Settings\SSanjuan\Mis documentos\Dropbox\Dropbox\Python\SpareParts\app.yaml 中的 main.py ",第 27 行,第 1 列 2012-05-04 13:02:31(进程退出,代码 1)

4

2 回答 2

30

在您的 app.yaml 中使用main.application而不是。main.py您需要前者才能设置threadsafetrue.

于 2012-05-04T11:35:47.350 回答
17

我也遇到了同样的问题,这是答案。

对于 Python 2.5 运行时,您正在指定文件的路径——即脚本:myfolder/myfile.py。

对于 Python 2.7 运行时,您正在指定一个对象。因此假设 myfile.py 包含一个适当的 WSGI 对象“app”,它被指定为脚本:myfolder.myfile.app。

于 2012-11-25T18:45:05.493 回答