我曾尝试从Python 2.5迁移到Python 2.7,但每次都会遇到同样的错误。
我在Python 2.5中使用app.yaml文件和一个脚本main.py进行了一个非常简单的测试,它运行正常。它只是一个Hello World类型的脚本来检查everythin工作正常。
的app.yaml
application: sparepartsfinder
version: 1
runtime: python
api_version: 1
handlers:
- url: /blog
script: main.py
- url: /blog/new_entry
script: main.py
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脚本中进行更改。
的app.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
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的\厨房规划建议]” 解析yaml文件时出错: 无效的对象: 无法使用CGI处理程序启用threadsafe:main.py 在“C:\ Documents and Settings \ SSanjuan \ Mis documentos \ Dropbox \ Dropbox \ Python \ SpareParts \ app.yaml”中,第27行,第1列 2012-05-04 13:02:31(进程退出代码1)
答案 0 :(得分:30)
在app.yaml中使用main.application
代替main.py
。您需要前者才能将threadsafe
设置为true
。
答案 1 :(得分:17)
我遇到了同样的问题,这就是答案。
对于Python 2.5运行时,您指定了文件的路径 - 即脚本:myfolder / myfile.py。
对于Python 2.7运行时,您指定了一个Object。因此,假设myfile.py包含一个适当的WSGI对象'app',它被指定为script:myfolder.myfile.app。