终于配置好了web.py
时间:2010-11-24 来源:jacky_chen
这几天一直在折腾python的web开发,同时在win下和linux下弄,都没弄好。到了昨晚,终于有点眉目了,今天上午一过来,基本上就弄好了。
先说说定势思维吧:ASP等容易配置,asp.net也难不到哪去,PHP的话,在IIS,也成功的配置成fastcgi运行,在apache里面也配置 成功了,jsp的开发环境也在apache配置成功过。可是,这次的web.py在lighttpd里面的配置让我很纠结。
一开始,在IIS和apache下,运行python脚本,配置好了,没有问题。可是,要用python做WEB开发的话,肯定是要先熟悉一个框架。我选 择的是web.py。然后,在lighttpd下面的话,很是纠结了。出了一大把一大把的错误。不是权限问题,就是对linux不是太熟;要么就是莫名其 妙的报错,差点让我都没信心了。我以为,也会像php一样的配置,但是,web.py本身就是一个轻量级的WEB服务器,要以fastcgi的形式,整合 到lighttpd里面去。由于这个思维的定势,一直没搞明白,一直都算是在瞎折腾,网上的一些配置,也没认真细致的去看。此时,就会浮躁了。明显在 fastcgi的时候,lighttpd.conf里面有一段了,有一个PHP配置的DEMO,我也没有认真的看,直接把web.py的加上去,导致一次 又一次的报错。后来,静心的看了下,原来这里面已经有了,加上去后,又是权限不足,它还不是明显的提醒,还是一个劲的显示lighttpd成功运行,但是 不绑定端口,那就更访问不了了。然后又得查看日志,找出里面的错误。。我都要疯掉了。。。找到之后,网上说是权限问题,可是code.py已经给了权限 了,原来是socket文件夹,要有权限,我真服的。。
还有个让人纠结的问题,我的lighttpd怎么执行restart的时候,会显示端口已经绑定啊,,每次都要kill掉之后,重新start或 restart;以前都不会啊,难道我又哪里配置出错了啊。。。。。网上也没有找到解决的方法。。。liunx啊,咳。。纠结。。。真的是不太适合那些非 开发人员。。。
昨天弄了下数据导入的一个问题,从AC导入到MSSQL里面。已经实现了用程序去读,去写,可是效率极其低下,几十万的数据,弄了两天多。然后,我就改成 用opendatasource的方法实现,可是,没有容错性。AC里面的数据导入到MSSQL里面,是很容易出错的,字段限制不严格等等,都是问题。而 opendatasource方法的话,直接在MSSQL里面执行,似乎,不太好中间操作。。想过一些办法:比如说,先读那些容易出问题的字段(这里主要 指datetime字段),保存成nvarchar类型的,然后再做一个容错处理,最后在导入的时候,排除掉那些有错误的,这样的话,相当于读了两次,而 且,似乎也会有点纠结。。其它的办法正在想。。如谁有好的办法,请指教。。
还有,原来MSSQL的存储过程里面,是不能够加-1的,,汗死。。只能加0,+1,比如说,select xx=xx+(-1) from xxx,那么,xx还是加1,而不是-1。。晕死。。。
上面就写了最近遇到的一些问题,,希望对大家有帮助。。
总结下web.py在lighttpd下面的配置:
1。安装和下载python和web.py和lighttpd这个就不说了,可以apt-get(我用的ubuntu),也可以下载源自己编译。
2。web.py的官方网站上有code.py,注意格式,python是强缩进的。写好后,运行python code.py,就可以在http://127.0.0.1:8080访问了,如果达到了这步,就成功一小部分了。
付code.py:
#!/usr/bin/env python
import web
urls = (
'/(.*)','index'
)
app = web.application(urls, globals())
class index:
def GET(self, name=None):
if not name:
name = 'world'
return 'Hello, ' + name + '!'
if __name__ == "__main__":
app.run()
3。配置lighttpd。
server.modules = (
"mod_rewrite",
"mod_setenv",
"mod_secdownload",
"mod_access",
"mod_auth",
# "mod_httptls",
"mod_status",
"mod_expire",
"mod_simple_vhost",
"mod_redirect",
# "mod_evhost",
# "mod_localizer",
"mod_fastcgi",
"mod_cgi",
"mod_compress",
"mod_userdir",
"mod_ssi",
"mod_accesslog" )
fastcgi.server = (
#".php" => (( "host" => "127.0.0.1", "port" => 1026, "broken-scriptfilename" => "enable", "allow-x-send-file" => "enable" ) ),
#"/prefix.fcgi" => (( "host" => "127.0.0.1", "port" => 1026, "check-local" => "disable", "broken-scriptfilename" => "enable" ))
"/code" =>(("socket" => "/tmp/fastcgi.socket","bin-path" => "/var/www/pyweb/code.py","max-procs" => 10,"bin-environment" =>("REAL_SCRIPT_NAME" => ""),"check-local" => "disable"))
)
这些是我的配置文件的一部分,其它部分默认就可,当然server-root这些,就自己配置了。fastcgi.server里面已经有了,只需要 把"/code"=>这段加上去就行了。注意,socket文件夹,一定要有写的属性,没有的话,可以用:sudo chmod 777 /xxx 来给权限,code.py也一样。