我只想说清楚,在Windows中,工作正常,但当我尝试在我的VPS中部署此脚本时,它会失败。
这有点奇怪,因为如果我添加一个映射到主要的web应用程序实例“mainwebapp”它可以工作,但每当我将它添加到任何子应用程序时它显示为webpy“Not Found”,我敲打我的因此而靠在墙上。
在Windows中,我有Wamp 2.2。在我的Vps中我有CentOS 5,nginx和uWsgi以及相同的Python(2.7)&我的窗口中的Webpy版本。
我几乎可以肯定这是nginx / uwsgi的问题,因为当我在我的Vps中切换到apache / mod_wsgi时,它也可以像我的Wamp本地服务器一样工作。
到目前为止,这是我测试过的代码,它非常简单:
class subappcls:
def GET(self):
return "This will also be shown fine"
sub_mappings = (
"/subpath", subappcls
)
#subclass web app
subwebapp = web.application( sub_mappings, globals() )
#mapped clas
class mapped_cls:
def GET(self):
return "this mapped sub app will not be found"
#Here I add mappings:
subwebapp.add_mapping("/mapped_sub_path", mapped_cls
class appcls:
def GET(self):
return "main app"
main_mappings = (
"/subapp", subwebapp,
"/app", appcls
)
mainwebapp = web.application( main_mappings, fvars=globals() )
class indexcls:
def GET(self):
return "this will be shown just fine"
mainwebapp.add_mapping("/another",indexcls)
application = mainwebapp.wsgifunc()
当我访问时:
/ subapp / subpath #will work
/ subapp / mapped_sub_path #will not work
这样可以正常工作:
/应用
/另一
这是uwsgi日志: *在[2012年12月4日18:41:52] 上启动uWSGI 1.3(64位) 编译版本:4.1.2 20080704(Red Hat 4.1.2-52)于2012年11月24日02:21:31 os:Linux-2.6.18-194.17.4.el5xen#1 SMP Mon Oct 25 16:36:31 EDT 2010 警告:您正在以root身份运行uWSGI! (使用--uid标志) 您的进程数限制为32832 您的内存页面大小为4096字节 检测到最大文件描述符号:1024 锁定引擎:pthread强大的互斥锁 uwsgi socket 0绑定到UNIX地址/tmp/app.sock fd 3 Python版本:2.7.3(默认,2012年10月30日,06:37:20)[GCC 4.1.2 20080704(Red Hat 4.1.2-52)] 禁用Python线程支持。您可以使用--enable-threads *
启用它编辑:我使用--enable-threads参数启用了线程,但也没有。
提前致谢。
答案 0 :(得分:1)
问题似乎与重新加载器有关。如果在集成开发服务器(使用命令python code.py
)中运行,则以下代码有效:
import web
web.config.debug = False # turns off the reloader
class subappcls:
def GET(self):
return "This will also be shown fine"
sub_mappings = (
"/subpath", subappcls
)
#subclass web app
subwebapp = web.application(sub_mappings, globals())
#mapped class
class mapped_cls:
def GET(self):
return "this mapped sub app will not be found"
#Here I add mappings:
subwebapp.add_mapping("/mapped_sub_path", mapped_cls)
class appcls:
def GET(self):
return "main app"
main_mappings = (
"/subapp", subwebapp,
"/app", appcls,
)
mainwebapp = web.application(main_mappings, globals())
class indexcls:
def GET(self):
return "this will be shown just fine"
mainwebapp.add_mapping("/another", indexcls)
if __name__ == "__main__":
mainwebapp.run()
else:
application = mainwebapp.wsgifunc()
跑步卷曲:
curl http://localhost:8080/subapp/mapped_sub_path
this mapped sub app will not be found