2011/08/01更新说明:目前 http://www. 域名已用于作国内Python技术聚会的官方站点,而原有的问答部分的功能已切换到 http://www. 上。 Python问答网站http://www.发布已满一月(上线公告见:中文Python社区ChinaPy上线Beta测试),期间网站程序一直在不停的打补丁,主要因为采用的问答系统OSQA还处于beta阶段,问题比较多,特别是在对中文编码的支持上。现在网站系统和用户都已经比较稳定,是时候兑现我在ChinaPy上线公告中所说的“开发、部署总结稍候将博文以记录之”的诺言了。 细心的人可能也注意到了,本博客标题中的“开发”两个字是打了引号的,因为ChinaPy采用的系统是现成的开源的OSQA和LBForum,我实际并没有做多少开发工作,主要就是将两个系统合并为一体、打补丁和定制网站,因此最多也只能算是二次开发,故这里特意打了一个引号,大家千万不要以为ChinaPy的源代码都是飞龙写的,那样OSQA和LBForum的作者就要吐血了。 虽然上线到现在加起来才一个月,但零零散散发现还是有很多事情值得记一笔的。 ChinaPy网站起因为什么会筹建ChinaPy呢,原因其实很简单,就是不满意:
ChinaPy是不是解决了所有的这些问题呢?当然不是,相反还引发了其它一系列的问题,受OSQA系统的限制,我若要做一些大的改变也是比较困难或者说代价比较高的,因此对ChinaPy我也是很不满意的。 接下来我准备做的一件事情就是根据ChinaPy的用户反馈意见还有我这段时间对ChinaPy的使用和管理经验来打造一个全新的站点GuruStack.com,希望能够让我满意,让更多人满意,当然不可能让所有的人满意,至少JE是不会满意的。关于此,我将在接下来的一篇博客里做详细的说明,本文对此不再展开。 ChinaPy网站定位初期希望打造成另一个Python社区,但是从后面的反馈来看最有用的就是技术问答部分,因此ChinaPy以后将专注于Python技术问答。 ChinaPy系统选型ChinaPy聚焦Python,最开始考虑要搭建的内容包括问答、论坛和博客三部分,以问答为主,论坛用于排解用户灌水的压力,而博客用来发布一些站内的信息和组织Python线下活动。 因为是非商业的网站,因此考虑用现成系统来搭建,这样也可以较快速的上线。 问答部分有高仿StackOverflow的OSQA和askbot可用,它们均是基于cnprog的源代码来做的,当时对比相对的觉得OSQA的界面漂亮些,因此虽然OSQA还处于beta阶段但仍然选择了它,目前来看这是第一个错误的决策。 选择论坛程序的时候参考了http:///grids/g/forums/,最开始我试用了DjangoBB,DjangoBB功能还是很完善的,很适合建设独立的论坛站点。但相对的,DjangoBB体积也比较庞大,光crontab就好几个,系统相对复杂,要和OSQA合并相对难度较大,而本身我对论坛部分的要求也不高,只要能发布一些Python相关的信息和灌灌水即可,最终选择了国人的LBForum来作为论坛程序,LBForum界面清爽、简洁,程序代码结构也相对清晰,和OSQA合并的时候也没有费我太多力气。选择LBForum是一个正确的决策,但现在回过头来看,论坛部分是非常鸡肋的,决定上论坛部分却是又一个失策。 至于博客部分,开始想用子域名搭一个WordPress的,因为WordPress是PHP的,而问答和论坛都是基于Django的,这样博客和主站的用户、Cookie、Session和界面等的统一就是一个问题,后来发现OSQA自带的自定义页面和网站广播一定程度上能满足博客的需求,再加上从用户的调查反馈来看,博客的需求并不强烈,故最后并没有上博客子站点。 ChinaPy网站”开发”选择了OSQA和LBForum就意味着ChinaPy一个站下要跑两个Django程序,关于这个问题,在python-cn邮件里面刚好也有人问,我做了如下回答: 解决此问题有两种方案可选
相应的
除了上面提到的解决方案,代码中还需要将两个系统的登录界面统一为一个,并且在创建用户的时候,两边的用户数据需要初始关联起来,这些具体的实现大家可以去参考源代码https:///felinx/chinapy。 “开发”还有一大部分工作其实是修defect和定制一些需求,比如:最开始可以用中文用户名注册,但带来的问题实在太多,到处要打补丁,而且你还不知道哪里还存在地雷,最后被迫将中文用户名注册的功能关闭了,详细的修了哪些问题,有兴趣的也可以去看看源代码或commit日志。 ChinaPy网站部署ChinaPy部署在Amazon的EC2上,前端nginx处理静态文件并proxy动态请求给后台的Tornado进程,网站的Django程序是跑在Tornado上的。关于如何在Tornado上跑Django程序,Ben Darnell同学做了一个django-tornado-demo,主要就是这个tornado_main.py文件了。 ChinaPy目前跑在后台的5个独立的Tornado进程上(没有用prefork模式,实际情况是大部分时间都只用得到一个进程),用的就是这个方法,具体入口代码如下: import os import sys from tornado.options import options, define, parse_command_line import django.core.handlers.wsgi import tornado.httpserver import tornado.ioloop import tornado.web import tornado.wsgi sys.path.append(os.path.dirname(os.path.abspath(__file__))) os.environ['DJANGO_SETTINGS_MODULE'] = "settings" define('port', type=int, default=8000) def main(): parse_command_line() wsgi_app = tornado.wsgi.WSGIContainer( django.core.handlers.wsgi.WSGIHandler()) tornado_app = tornado.web.Application( [('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)), ]) server = tornado.httpserver.HTTPServer(tornado_app) server.listen(options.port) tornado.ioloop.IOLoop.instance().start() if __name__ == '__main__': main() 有人可能会问,为啥不试试uWSGI?有几个原因:
另外,ChinaPy的部署上还用到了一些技巧,请参考我的相关的博客: ChinaPy网站推广ChinaPy网站上线主要在python-cn邮件群组、豆瓣Python小组和ChinaUnix的Python小组等地方推广了下,中间还做了一次问卷调查收集了一些用户反馈意见,目前注册用户有300+,一个月时间在这么窄的一个专业领域算来还是不错,但看一下豆瓣Python小组有1万多用户,这个差距还不是那么一点点。 关于推广有一点必须要说的是,我在JE(现IE)发的跟我的博文中文Python社区ChinaPy上线Beta测试类似的内容则直接导致了我的JE账号被封,我也不申述了,只好跟JE说拜拜。虽然因为之前申请加入python-cn邮件群组屡屡被刷的事,对python-cn我一直持批评态度,但在ChinaPy推广这件事情上,我必须说python-cn比JE还是更有包容心的。 ChinaPy建站收获ChinaPy建站我个人觉得我最大的收获是认识和“笼络”了一帮热心的Pythoner,比如gastlygem、zoomquiet、alexander、args等等等等,它们或热心的回答网友的问题,或给网站提出各种意见和建议,虽然我不可能接受或实现全部的这些意见和建议,但我还是要忠心的感谢这些帮助我和ChinaPy成长的人。 同时,通过我的努力我也确实帮助了一些人,当我的答案被人接受为正确答案的时候,这个成就感是很强的,不知道ChinaPy的Pythoners你们有没有类似的感觉? 除了我个人的收获外,我想总还是有人从ChinaPy的Python问答中受益的吧,虽然现在还不多。 总结ChinaPy的建站经验,我相信我的下一个项目可以做得更好,敬请关注我的下一篇博客GuruStack.com专题。 转载请注明出处:http:///2011/04/chinapy-development-summary 访问(今日1/总计3,007) - 分享本文:你可能还喜欢: |
|