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

Tagged on: , ,

13 thoughts on “web.py部署 mod_wsgi and apache

    1. jyd Post author

      因为chomod +x /var/www只是加执行权限而已,应该说这是必须要的,不然www下的脚本运行不了。。。然后当时搬到用户目录是因为编辑问题,也就是写权限。。。即不想让普通用户对www目录具有写权限。。。

    2. jyd Post author

      突然想到。。好像chmod +x /home/jyd/www应该就可以吧?……这样就不用让apache用jyd用户运行了……

    3. jyd

      因为chomod x /var/www只是加执行权限而已,应该说这是必须要的,不然www下的脚本运行不了。。。然后当时搬到用户目录是因为编辑问题,也就是写权限。。。即不想让普通用户对www目录具有写权限。。。

    4. jyd

      突然想到。。好像chmod x /home/jyd/www应该就可以吧?……这样就不用让apache用jyd用户运行了……

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据