放弃Mod_fastcgi+apache?
尝试了一晚上,Apache没有重启成功。Mod_fastcgi在2003年的时候就已停止了开发。那时只是支持到Apache2.0.X版,现在使用的都2.2.X了,官方虽然提供了一个Patch,但我本地没有C编译环境,于是不了了之。此外,Fastcgi本身有些问题,线程出问题的时候可能关闭不了,不过中国(没有错吧?)有人解决了这个问题,那是另一个项目“fcgid”。用这个可以直接代替Fcgi。
寻找另一种部署FastCGI的方式。。lighttpd?
尝试了一晚上,Apache没有重启成功。Mod_fastcgi在2003年的时候就已停止了开发。那时只是支持到Apache2.0.X版,现在使用的都2.2.X了,官方虽然提供了一个Patch,但我本地没有C编译环境,于是不了了之。此外,Fastcgi本身有些问题,线程出问题的时候可能关闭不了,不过中国(没有错吧?)有人解决了这个问题,那是另一个项目“fcgid”。用这个可以直接代替Fcgi。
寻找另一种部署FastCGI的方式。。lighttpd?
Django + mod_python的部署方式的基础是我的上一篇文章。前提python、Django、Apache、Mod_python安装完备。
部署方式有两种:一是加直接在apache的httpd.conf下面加一个一个Location的元素:
<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myblog.settings
PythonDebug On
PythonPath "[r'F:\\develope\\projects\\myblog'] + sys.path"
</Location>
主要留意两个参数:SetEnv DJANGO_SETTINGS_MODULE 指定你的Django应用的settings.py。PythonPath Python程序的路径,如果你的Django应用不在Sys.path里面,那么加上你的应用路径,注意,如果你的项目路径为:D:\\projects\myblog那么,Python Path应该填D:\\projects。
这样,你可以通过http://localhost/mysite来访问你的应用,不过有一个问题,Django会把“mysite”当作请求的URL的一部分。你必须要把URLConf里的配置全加上mysite。显然,这种做法并不是很理想的。
为解决上面的URL问题,可以通过VirtualHost来配置使用另一个虚拟机作为Django应用的所在地。所不同的是,还是可以从根目录下访问应用,不过使用了不同的端口:
Listen 127.0.0.1:81
<VirtualHost 127.0.0.1:81>
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myblog.settings
PythonPath "[r'F:\\develope\\projects\\myblog'] + sys.path"
PythonDebug On
</Location>
</VirtualHost>
这一次,可以通过http://localhost:81/来访问应用了。
下面的文章讲述如何处理静态文件与FastCGI + Django
Mod_python的使用要求与Apache结合。我使用的Apache版本为2.2,python为2.5,配套的Mod_python为3.3.1。安装及调通的步骤如下:
一、安装Apache。到http://httpd.apache.org/下载最新版本的Apache,如果是Windows环境,直接下载可执行文件安装完就可以了。测试Apache是否正常工作,直接访问http://localhost就可以,当看到It works表示安装成功了。
二、安装Python。下载Python2.5版,直接安装即可。
三、安装Mod_python。到http://www.modpython.org/下载合适版本的Mod_python,注意Apache与Python的版本。在Windows下直接执行安装完之后,找到 C:/Program Files/Apache Software Foundation/Apache2.2\conf\httpd.conf(看apache安装的地方而定) 文件进行编辑,找到LoadModule部分并加上这句:LoadModule python_module modules/mod_python.so,这时候,安装Mod_python已经完成了。下面来进行测试Mod_python的工作情况。
四、测试。在本地建立一个独立的测试目录,如 D:/site,然后修改httpd.conf加入下面代码:
Alias /py d:/site/
<Directory d:/site/>
Order deny,allow
Allow from all
AddHandler mod_python .py
PythonHandler mptest
PythonDebug On
</Directory/>
上面的代表是这样的意思:定义一个别名,当访问localhost/py时,实际上是去d:/site/找文件。Directory里面定义了一些规则,注意前两行很有必要,否则有可能出现拒绝访问的情况,AddHandler mod_python .py意指针对.py文件指定一个Handler。PythonHandler mptest意指Python的Handler是mptest.py。我们在d:/site/下面添加一个mptest.py文件:
from mod_python import apache
def handler(req):
req.content_type = 'text/plain'
req.write('hello world')
return apache.OK
重启Apache,访问http://localhost/py/xyz.py 得到的结果是hello world。只要是.py结束的请求都会调用mptest.py来处理。
That's all。
把《太阳照常升起》改个名字,叫《死亡故事》我想也不是没有道理。看,如果把故事分成四段,那么第一段讲的是周韵的死、第二段是黄秋生的死、第三段是房祖名的死、第四段是所谓的阿辽沙的死,当然第四段同时是房祖名的出生。对这部电影突然有这样的想法只是因为我朋友一直问我,这部电影到底到告诉我们什么道理呢?我当时想,是不是看电影真的要问它告诉我们什么道理呢?我想啊想,阿辽沙死了,黄秋生死了,周韵死了,房祖名死了,但是太阳还是照常升起。尽管我自己觉得这些想法只是胡扯,不过自己真的还没有完全清楚姜文要告诉我什么道理。
我只是想丿开“道理”不讲,那貌似是一些教育片应该做的。去电影院看电影其实只应该追求现场的感受。跟我一起去看电影的朋友看完之后埋怨说不好看。我想我可以理解她这样说的原因,片子猛地看上去好像没什么意义、周韵最后那几次呼唤显得过于重复尖锐,让人受不了、陈冲和另一个女人的言行一定程度上让人接受不下来(我反而觉得这是戏演得好才能让人有如此真实的感受)、电影院过分夸张的音响效果以及这片子跟上一次我们一起看的《通天塔》一样,恰好是把故事分成N个不怎么连贯的故事来讲。
我却比较喜欢这样一部电影,色彩,浓烈而不艳,节奏,明快但沉稳、剧情的每一部分都充慢了悬念直到最后才把所有的线条扯清楚了、剧情到处都让人自然而然地笑出来,却不是爆笑的那种。
我很喜欢电影里那好像很无赖的重复:周韵重复着爬树、念诗;房祖名重复着“妈,你怎么了”,然后撒开脚丫子往村外跑;姜文那一声刺耳的号响;还有最后周韵的“阿辽沙,别害怕,火车在上面停下来了,他一笑天就亮了”。这些镜头是那么随便又是那么刻意地安排着。电影就应该这样,我想。不是正儿八经的,导演把自己的想法和创意在里面表现得淋漓尽致,就像找个地,随便撒撒野那么自然才是真的。
黄秋生的演出,还是很赞,一出场那一段弹唱和第一句话“丢你老母嗨”,马上让我感觉到他无处不在的痞子气质。最后黄秋生的死,我还没法理解。是因为他被冤枉为摸女人屁股的色狼、陈冲(一直与姜文有染)对他的表白还是其他?我只知道他死得很安祥。吊死在半空中,并且面带微笑,双手插裤袋,我认为这是最酷的动作!
陈冲在里面演一个比较骚的女人,原来与姜文一直有染,爱的却是黄秋生,在黄秋生的病房里,陈冲的那一段表白真的能让人笑翻,能让人吐,也能让人哭。最搞笑的是陈冲走了之后来的另一个表白的女人。
说说姜文的戏,早在20年前他就有了老婆,但是分居两地,一直与陈冲有不干净的关系,后来,他40岁的老婆却与20刚的房祖名搞上了。用崔建的话说:你娶了老婆,扔在那里不管,自已在外面搞那么多事,现在你老婆跟20岁的小队长好上了,你真的认为是你老婆的问题么?本来一心要杀房祖名出气的姜文意识到自己的错误,已打算放房一马,不再找天鹅绒,当他照常打猎拿回队里交给小队长的时候,没再提那些事。但是无知的房祖名却拿出一面锦旗说,你没找着天鹅绒我找着了,姜扭头走,房却大声叫道,喂,但是你老婆的肚子都不像天鹅绒啊!砰,枪响了,房祖名生命的结束更多是因为他对性的无知,不知道男人原始的妒忌,这也许他从小没父亲的缘故吧。也许他死后也不清楚自己这样做是不是真的该死。
看电影没看到最后,你真的不会清楚所有的事情,不会清楚到底在讲些什么事。最后时光倒转的描述才把所有的迷揭开了,周韵下火车往回跑捡回在铁道出生的房祖名,站在车厢上面面朝太阳出升的地方没有休止地喊“阿辽沙,别害怕,火车在上面停下来了,他一笑天就亮了”。这时,突然很确定地知道,她疯了以后爬到树上不断地喊这些话其实不是诗歌,也不是散文,而是真实的。
太阳猛地一跳,跳出了水面。电影结束了,而故事正开始。
又做了特困生。累得好像最近几天都没有睡觉似的,今天早上去客户的路上起码打了二十几个哈欠,还好给客户Show皮皮踢的时候没有打出来。回到家里打算睡上半个小时再回公司,却发觉死活都没有睡着,回到公司,趴在桌子上反而睡得香,你说我是不是有点犯贱。
晚上回到家也一样,爬上床准备先睡一觉,没想到上了床却没半点睡意。看来还是只好起来,好好做我的特困生。看个电影,写点代码也好。反正,半夜来了,就能睡了。
感谢Django强大的syndication feed framework,我可以很轻松地实现RSS的生成工作。Fallever的RSS可以从每个Blog的右下角找到。Django的官方文档见这里。文档中的第一个Example并不适合我,Fallever现在的情况是提供每个Blogger一个RSS文件,因此需要传参数,情况比较类似“A complex example”那一段。
使用Django的SFF来生成RSS太简单了。有下面几个步骤:
一、配置URLConf:
(r'^feeds/(?P
URL表达式中,url参数实际上允许很多个“/”存在。在Fallever中的用法是:/feeds/blog/{{shortcut}}/rss.xml.那么Django会把“feeds/”后面那一大截当作URL的参数传进去生成的机器(姑且这样叫吧),Shortcut是代表一个Blog的简称。注意,"feeds/"作为RSS路径的开头是必须的。
二、写feeds。
你已经留意到了URLConf里面的第三个参数吧。feeds是一个字典,Key是Feed的类型,Value是处理该类型的类。Fallever的第一个字典是:
feeds = {'blog':recent_blog_entry}
这个字典说“feeds/”后面凡是跟着blog字样的路径全由recent_blog_entry这个类来处理。在blog后面跟着的参数从哪里可以找回来呢,我一开始就有这样的问题,原来在这里:重写Feeds类的get_object(self, bits):bits参数就是把blog后面的参数切成了数组,如/feeds/blog/jeff/rss.xml切割后bits参数是:['jeff','rss.xml']在这里我们只需要拿我们有用的元素就可以了。rss.xml这一节东西我是用来哄IE的。
三、在recent_blog_entry类里重写Feeds的几个方法:title,link,description,items,items_link。具体的在这里不说了,还有需要为这一次的Feed加上两个简单的模板。都去参考文档看吧 :)
今天晚上Fallever加上两个Powered by的Logo,Mysql和Django。在考虑是不是把Python也加进来。嘿。
在今晚顺便把RSS提供出来、本次提供的RSS包括:个人博客的最近更新、个人博客分类最近更新。然后,是时候调整一个后台的结构,建立一个完整的可用的博客系统。
接下来会有很多东西要做,捞捞说过,如果我把它在BlogCN上的东西全搬过来,那他以后就在这里安家。我说你不介意我暂时界面简陋、短期内开发进度不快等等你就等着吧,到时帮你搬过来。捞说,我年年25,不急。
关于黑莓手机、apple、twitter、互联网、web2.0以及生活的碎言碎语。请在twitter上
follow我,欢迎同好者talk to me bbmyth AT gmail.com。博客Hosting在 webfaction。