折腾 – 发芽网后台更新Python2.7.2, Django1.3, Pygments1.4, jQuery1.6.2

作者:半瓶墨水   链接:http://www.2maomao.com/blog/bluehost-python272-django13-pygments14-jquery162/

发芽网后台更新了:Django1.3, Python2.7.2,jQuery1.6.2,Pygments1.4

其中Pygments的更新带了更多的语法高亮支持,包含了许多人熟悉的AutoHotkey

话说,似乎是临时的,很多的国外网站都没法访问了,连ssh也不可用了,这些网站都是技术性网站,应该没问题的,加上vpn就可以访问了,奇怪的是,用vpn也访问不了twitter了,难道传说中的白名单制度开始试水了?Fuck GFW! @ 2011-08-21, 18:47:11

—————————————————————

最近有人在代码发芽网上留言问能不能加上AutoHotkey的高亮支持,瞄了一眼Pygments的新版本1.4,发现已经支持了,打算搞过来。另外发现发芽网后台的Django和Python以至于jQuery都老了,想起前几天看到阮一峰介绍新版jQuery性能的文章,据说快了很多,决定把这些一起更新一下,折腾开始了,且看一个业余的网页开发者会遇到多少问题。。。

1. 首先,参考以前的文章”configure your own python 2.5.2 on bluehost”安装Python2.7.2,下载编译安装,搞定。顺手改了.bashrc,这样下次ssh到服务器用的就是2.7了

2. 然后,下载easy_install的egg包,用 sh xxx.egg 安装完毕,然后,easy_install安装了发芽网依赖的库:django1.3, PIL, flup, MySQL-Python, Pygments1.4, markdown2, python-openid,为了用起来顺手,又安装了ipython

3. 然后,参考以前的文章Bluehost Django fastcgi配置, 静态(static)文件处理更改了t.fcgi,指向新的python库

4. 然后到后台杀死所有t.fcgi进程,网站立马不可访问了,500 Error或者干脆半天都不返回,杯具。

5. 查吧,一个个查,根据多次折腾的经验,觉得应该是t.fcgi里面出异常了。这个好办(现在说好办,当时也想了半天),因为t.fcgi也是python脚本,直接执行之,居然没有发现任何问题,突然发现,t.fcgi最上面一行,对,就是指定python可执行文件地址的地方,用的还是python2.5,sigh,亏我还在以前的文章里专门写过注意事项。

6. 再次杀死进程,打开网站,nnd,依然是挂的,再次执行t.fcgi,这次报了异常 – flup库没有安装,晕倒(前面步骤2里是全的,当时忘了装了),再次执行,没有啥问题了………中间由于每次fail都会发日志给我的邮箱,还遇上了bluehost发email的限制,不得不在Django配置文件里打开了Debug=True调试选项

7. 再次杀死进程,打开网络,tnnd,依然是挂的;好吧没关系,就放我换个姿势再来一次,在发芽网源文件目录底下,敲入python manage.py runserver,对,就是起了一个本地Django Server,果然起不来,但是可以看到异常了,看出来似乎是PIL里面出的问题,错误信息是MemoryError还提到了ctypes,肿么办?这个吓不倒我,Google之,发现这篇文章,里面说,打开$HOME/lib/python2.7/ctypes/__init__.py,找到CFUNCTYPE(c_int)(lambda: None),注释掉它就ok但是不知道到底为神马。我打开一看,里面居然有一段注释,意思是,写这几行代码的人也不完全清楚为什么要写这行代码:

# XXX for whatever reasons, creating the first instance of a callback
# function is needed for the unittests on Win64 to succeed.  This MAY
# be a compiler bug, since the problem occurs only when _ctypes is
# compiled with the MS SDK compiler.  Or an uninitialized variable?
CFUNCTYPE(c_int)(lambda: None)

8. 这样的神问题都碰上了,我像个小强一样挺了过来,注释掉这一行,居然,就搞定了~~~

9. 终于,发芽网可以打开了,世界和平了,王子和公主从此过上了幸福的生活~~~直到,我发现admin页面无法访问了

10. 这时候我大概已经患上了斯德哥尔摩综合症,看到这个问题,居然虎躯一震,精神焕发,查起了Django1.4的文档,发现,urls.py里面有个地方要改改了。这么快就搞定,很是乏味啊~

11. 终于成功的打开了admin页面,发现页面布局有些古怪,突然想起以前发的另一篇文章Bluehost上架设Django之Admin,原来admin_media还是指向以前安装的1.1的,删掉链接文件重新ln一下,搞定

12. 终于,看起来一切正常了,siteuptime服务告诉我说 back to normal 。。。咚咚呛

13. 然后发现代码发芽网贴代码以后,看起来就是一片漆黑,用chrome的developer tools验证了一下,原来所有的jQuery.ajax调用都会跑到异常分支里去,加上了几行代码发现报错 Unexpected token 。继续Google关键字Unexpected token和jQuery,发现stackoverflow上面有个帖子说这个事情,居然是个jQuery的bug?jQuery会把返回结果当成json进行eval,当然会有些问题啦,于是把所有的ajax调用里面都加上了一句 dataType: ‘text’ 之后,一切ok了

14. 至此,好像一切都好了,第二天,tianyi song同学给我写信,问我为什么代码发芽网不能用了?还给我发来了截图。来回交流了几次,发现我原来的代码里对Pygments的一个格式有严格依赖,在Pygments1.4里面这个格式有些改动,没办法,把Pygments源码里面html.py这个formatter改了几行,总算搞定了

15. 篇幅限制,省略细节问题十数条,还会遇到神马问题?期待~~~

经验总结

1. 不要怕,找到问题,细心分析,想各种方式去debug,搜索Google,大不了去看代码

2. 本地环境和部署的环境的一致性很重要,Service Engineer很重要啊,要想再更新的同时网络不下线,没有SE的支持是很困难的

3. 做个大网站,没有unit test也没有测试团队,那是不可能地~

btw, 或许有人问,搞这么多问题,就为了一个小小的网站,值吗?

值!兴趣是无价的,折腾是永恒的~~~在折腾中学习就是爽~~~!

7 条评论 发表在“折腾 – 发芽网后台更新Python2.7.2, Django1.3, Pygments1.4, jQuery1.6.2”上

  1. kojog说道:

    你好,我注册之后,QQ邮箱收不到邮件,能否重新发送一篇注册确认呢?想要用这个用户名重新用一个邮箱注册发现已经被我注册过了。但是我验证不了。帮忙解决一下。用户名和邮箱就是现在写的这个。。

  2. 半瓶墨水说道:

    @kojog
    48小时以后就可以重新注册了

    国内的邮箱和国外的邮箱之间的互通现在受GFW的影响,非常的不稳定

  3. sopython说道:

    btw, 或许有人问,搞这么多问题,就为了一个小小的网站,值吗?

    值!兴趣是无价的,折腾是永恒的~~~在折腾中学习就是爽~~~!

    向你学习了

  4. 比尔盖子说道:

    上不去Twitter的原因只是DNS缓存污染而已,用Google的DNS吧。

  5. Freddy说道:

    :v 感謝站長提供這麼好的工具!!加油啊!!辛苦了!!

  6. memorybox说道:

    顶老大。
    一个人搞网站就是折腾啊。一个月前我也不知道Webpy,Django神马东东,自从头脑一热架了一个站后各种问题都来了,一个人就是全天候伺候还很麻烦……

  7. cot说道:

    做的很不错啊,很喜欢发芽网。支持站长

留下回复