Google App Engine 上的错误 Python 2.7 - 无法使用 CGI 处理程序启用线程安全
Posted
技术标签:
【中文标题】Google App Engine 上的错误 Python 2.7 - 无法使用 CGI 处理程序启用线程安全【英文标题】:Error Python 2.7 on Google App Engine - Threadsafe cannot be enabled with CGI handler 【发布时间】:2012-05-13 22:36:31 【问题描述】:我尝试从 Python 2.5 迁移到 Python 2.7,但每次都遇到相同的错误。
我在 Python 2.5 中使用 app.yaml 文件和一个脚本 main.py 做了一个非常简单的测试,它运行良好。脚本只是一个 Hello World 类型来检查一切工作正常。
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 时都不起作用。 (我总是犯同样的错误)。
我可能理解我的机器(我同时拥有 Python 2.5 和 2.7)在 Windows XP 上的问题,但在我上传时却没有。
这是错误:
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 处理程序启用线程安全:main.py 在“C:\Documents and Settings\SSanjuan\Mis documentos\Dropbox\Dropbox\Python\SpareParts\app.yaml”中,第 27 行,第 1 列 2012-05-04 13:02:31(进程以代码 1 退出)
【问题讨论】:
【参考方案1】:在您的 app.yaml 中使用 main.application
而不是 main.py
。您需要前者才能将threadsafe
设置为true
。
【讨论】:
但是 main.application 文件在哪里?如果我改变它会出现新的错误。main.application
(或main.app
)应该直接用点表示法指向一个WSGIApplication对象。顺便说一句,您的 main.py 发生在哪里?如果它在项目***目录下,您可以根据该文件的全局范围内的 WSGIApplication 对象的名称使用main.app
或main.application
。
另见:developers.google.com/appengine/docs/python/python27/…【参考方案2】:
我也遇到了同样的问题,这就是答案。
对于 Python 2.5 运行时,您正在指定文件的路径 -- 即脚本:myfolder/myfile.py。
对于 Python 2.7 运行时,您正在指定一个对象。所以假设 myfile.py 包含一个适当的 WSGI 对象“app”,它被指定为脚本:myfolder.myfile.app。
【讨论】:
完全正确 - 在您的路径中将/
替换为 .
,一切都很好!
将/
替换为.
我得到了ImportError: No module named myfolder
。解决方案:touch myfolder.__init__.py
哇!这只是一个该死的'。谢谢你为我节省了几个小时。以上是关于Google App Engine 上的错误 Python 2.7 - 无法使用 CGI 处理程序启用线程安全的主要内容,如果未能解决你的问题,请参考以下文章
Google App Engine 上的错误 Python 2.7 - 无法使用 CGI 处理程序启用线程安全
Google App Engine 上的 Django TemplateDoesNotExist
如何修复 Google App Engine dev_appserver.py:watcher_ignore_re 标志“不是 JSON 可序列化”错误? [复制]