web.py部署 mod_wsgi and apache
摘要:web.py通过mod_wsgi部署在apache2上,无法导入其它包的解决方法。最后用过seeother和static文件夹直接访问静态html代码。
这次,疼了好久。。首先是怀疑apache2配置,然后怀疑代码,之后各种乱搞。
背景:和ywj一起写个简单的图书管理系统用来管理实验室的图书
事情的起因:ywj写了些html页面给我,无奈无法经过web.py的Templetor的认同。通过render显示的话,总是出错,错误提示太长,贴出最后一句:
TokenError: ('EOF in multi-line statement', (2, 0))
好象是括号不匹配。。。但是要我这种js文盲去从一大堆js代码中找出错误,实在是。。。。【后来发现,我这个是因为jQuery的$符号和web.py的模板冲突的,把$符号改成jQuery或者用其他符号代替,或者把大部分js代码放到其它的js文件中就行了。】
理想的解决方案:那些html页面通过apache2直接访问,然后涉及到处理的部分在让web.py来处理。
于是就开始通过mod_wsgi部署到apache2上。
怎么部署,还是参考cookbook,但是遇到新的问题
Premature end of script headers: code.py
不懂怎么解决,尝试了网上的各种方法,还是不行。后来直接把所有代码去掉,直接用cookbook的部署例子,终于可以了。。
然后尝试导入其他包,于是错误又来了:
Traceback (most recent call last): File "/var/www/web/code.py", line 4, in <module> from config.url import urls ImportError: No module named config.url
然后各种搜索,各种找资料,还是没解决完全解决,都想不要web.py了。。最后才终于找到:
import os import sys abspath = os.path.dirname(__file__) sys.path.append(abspath) os.chdir(abspath)
在import自己的包之前要先把路径加到系统的path中。。。
这时候终于正常了。。
但是。。。。ywj给的那些页面我放在网站根目录下,通过/register.htm即可访问,然而web.py是放在/webpy-app/下面的【如果放在根目录,/register.htm就无法访问】。在注册页面点击提交跳转到web.py之后就回不去根目录了。
今天就到这里了,问题等明天再想怎么解决~~
——————这里是nc的分割线———————————–
发现自己太土了,简单的东西搞得这么复杂,要直接访问html文件,只要把那些文件放在static目录就行了,访问方式就是127.0.0.1/static/index.html。。。如果闲url太长,加个映射
urls = ( '/', 'Index' ) class Index: def GET(self): raise web.seeother('./static/index.html')
总结:web.py还是直接放在根目录,通过web.py的url映射,可以让我们自由的控制url。用过seeother函数直接访问静态文件。
注意:httpd.conf配置好mod_wsgi之后,不要在sites-enabled里面再次配置,不然会出问题【为什么?现在还不懂。。。】这里贴一下httpd.conf
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so WSGIScriptAlias / /home/jyd/www/code.py/ Alias /static /home/jyd/www/static/ AddType text/html .py <Directory /home/jyd/www> Order deny,allow Allow from all </Directory> <IfModule !mpm_netware_module> User jyd Group jyd </IfModule>
因为在var/www/里面编辑文件太麻烦(每次都要sudo),所以把网站搬到用户主文件夹,因此需要让apache2通过jyd这个用户运行,不然权限又要弄一次,太麻烦了。。。不过这样安全性低就是了。。以后真正部署的时候肯定要让apache2运行在低权限的用户下。
转载请注明: 转载自http://jyd.me/
本文链接地址: web.py部署 mod_wsgi and apache
- centos6初体验
- apache2常用配置
干嘛不chmod +x /var/www
因为chomod +x /var/www只是加执行权限而已,应该说这是必须要的,不然www下的脚本运行不了。。。然后当时搬到用户目录是因为编辑问题,也就是写权限。。。即不想让普通用户对www目录具有写权限。。。
突然想到。。好像chmod +x /home/jyd/www应该就可以吧?……这样就不用让apache用jyd用户运行了……
因为chomod x /var/www只是加执行权限而已,应该说这是必须要的,不然www下的脚本运行不了。。。然后当时搬到用户目录是因为编辑问题,也就是写权限。。。即不想让普通用户对www目录具有写权限。。。
突然想到。。好像chmod x /home/jyd/www应该就可以吧?……这样就不用让apache用jyd用户运行了……
干嘛不chmod x /var/www
Taking the ovewiver, this post hits the spot
kiss you.
(╯﹏╰)
静态文件直接交给apache处理就好了吧
是……当时第一次接触python的web,然后也不懂apache,所以搞得特别复杂……
不错的站点,以后一定常来。
网站不错,雁过留痕,欢迎互访!