分类: ‘DJango’ 的所有文章

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

2011年08月21号,星期日 作者:半瓶墨水   链接: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, 或许有人问,搞这么多问题,就为了一个小小的网站,值吗?

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

更新发芽网到Django1.1,因为傻逼年年有,今年特别多

2009年08月9号,星期日 作者:半瓶墨水   链接:http://www.2maomao.com/blog/fayaa-now-django1dot1-for-bullshiters/

今天忍不住把发芽网后台更新了到了Django1.1,不是因为这个更快更好,主要是因为有个傻逼,天天到代码发芽网上孜孜不倦的贴黄色网站链接,删帖删到手软

代码发芽网搞代码高亮的网站,留垃圾留言之前看看坑行不行?

最最关键的是,这些标明了是“Sex Movie”以及“Adult Video”的链接,都他妈是不可访问的!!!
是可忍孰不可忍!挂掉他!!!

这时候才发现,在Django原来自带的后台里,删除内容的时候只能一个个点开,一个个删

这才想起来最近Django更新过,去碰碰运气看到了1.1版的后台已经支持批量删除了,说不定大家都被这样的傻逼惹毛了

直接备份数据库,然后更新,批量删除

另外又检查了一下,还有一堆内容不长过10个字符的帖子,都是匿名帖。

日,没办法,空间有限,挥霍不起,在匿名发帖的时候加上了Captcha

匿名发帖的朋友,对不住了,麻烦发帖前做一下简单的算术:个位数的加法,应该还行吧
实在觉得烦,注册并登陆一下就不用填了,5分钟不到的时间,一年都不用重新登录
如果不想注册又不想做算术又想要贴黄站链接,请直接来信交流,谢谢

BTW1: 科技进步原来真是由色情推动的
BTW2: 4500个帖子里面有600个spam,真是无语了

Bluehost上架设Django之Admin

2008年06月15号,星期日 作者:半瓶墨水   链接:http://www.2maomao.com/blog/bluehost-django-admin/

Bluehost上面架设Django的过程见这篇文章:Bluehost Django fastcgi配置, 静态(static)文件处理

架好以后,最近做代码发芽网才发现Admin界面是裸的 – 没有css。

分析了一下,应该是Admin_media之类的没有设置好。Google了一下Dreamhost Django Admin(为什么不是Bluehost而是Dreamhost?因为他们很相似,但是Dreamhost的wiki明显优于Bluehost的论坛),找到这一篇:
http://wiki.dreamhost.com/index.php/Django
里面说,做一下ln -s就行了
我的是这样设置的(根据你自己的Django media文件夹位置进行调整):

settings.py: 
MEDIA_ROOT = '/home/twomaom1/django/django-trunk/django/contrib/admin/media'
ADMIN_MEDIA_PREFIX = '/admin_media/'

然后到命令行下:

ln -s /home/twomaom1/django/django-trunk/django/contrib/admin/media /home/twomaom1/public_html/fayaa/admin_media

搞定!

顺便改了所有的model,加上Admin,美化了一下下,Django的Admin就是好用啊。

代码发芽网(Beta版,在线代码语法高亮)发布,欢迎测试、试用

2008年05月23号,星期五 作者:半瓶墨水   链接:http://www.2maomao.com/blog/code-fayaa-beta/

在线代码语法高亮,支持多个主题,可直接复制粘贴高亮代码到各个网站、blog主流编辑器
已知的支持列表(不完全):
百度空间
csdn发帖
wordpress默认编辑器以及其主流编辑器
微软Office、Outlook
Google Gmail以及Google文档
163邮箱
等等等等,还有许多没有写在这里的

发芽网主页:http://www.fayaa.com/,目前只有“代码发芽网”一个子站点,将会发布更多
代码发芽网主页:http://www.fayaa.com/code/

基于python + Django + pygments,断断续续写了快要半年了,终于可以发布beta版了。



代码发芽网:
聚沙成塔,水滴石穿,积少成多,绳锯木断

您是否曾经有过这些经历
o 发现了很好的代码,保存后再也找不到?用邮件发一段代码,被抱怨说格式很乱?
o 发代码段给朋友时,没有彩色语法高亮?或者,复制粘贴以后却依然是白底黑字?

该站特色:

代码的版本管理与更新记录, 近百种编程语言的语法高亮, 看代码简单高效
动态切换语法高亮主题配色, 加色后的代码可以复制粘贴, 粘贴后依然高亮

点击此处进入代码发芽网

简单的使用实例:
打开这篇文章: http://www.fayaa.com/code/view/20/
然后选择代码,复制,在blog后台粘贴如下(行号可以在复制前去掉)

Python语言: Python – 人性化的时间(比如:两分钟以前)
#人性化的时间:2008-01-27 08:37:29
#发芽网使用此函数来显示人性化的时间:比如1分钟以前,三天前,等等
def time_span(ts):
   delta = datetime.now() – ts
   if delta.days >= 365:
       return '%d年前' % (delta.days / 365)
   elif delta.days >= 30:
       return '%d个月前' % (delta.days / 30)
   elif delta.days > 0:
       return '%d天前' % delta.days
   elif delta.seconds < 60:
       return "%d秒前" % delta.seconds
   elif delta.seconds < 60 * 60:
       return "%d分钟前" % (delta.seconds / 60)
   else:
       return "%d小时前" % (delta.seconds / 60 / 60)

2008-05-25更新:
修正了代码行数过长引起行号混乱的bug
隐藏了Feedback页面的IP地址的最后一位
缩小了代码的字体
搞定了用户页面最后一页时的异常

2008-05-27更新:
修正了用户注册时用户名重复的问题

2008-05-28更新:
调整了配色方案和代码发芽网首页
修正了一个站内搜索的问题
新增了支持复制粘贴到Discuz!论坛的功能。

2008-05-30更新:
调整了行号切换方案,参见:代码发芽网显示代码时做行号切换的javascript脚本
完善了用户信息编辑
对界面颜色进行了一些微调
添加了给作者发信的功能(附加验证码)

2008-06-25更新:
这段时间其实都有更新,主要内容如下:
1. 评论里面的代码缩进没问题了
2. 界面进行了更多的调整,让字体配色显得更加舒服
3. 支持受限制的Discuz论坛发帖了,虽然有限,但有总比没有好
4. 加入了直接复制代码的按钮
5. 用户可以编辑自己的用户信息了
6. 切换行号以后复制粘贴不会再把行号包括进来
7. 加入了“给用户发信”功能
8. 把表情图片改小了一些,看起来更加协调
9. 发临时贴不需要填标题了

Bluehost上面搞定Mysql utf-8配置, for Django

2008年05月23号,星期五 作者:半瓶墨水   链接:http://www.2maomao.com/blog/bluehost-django-utf-8/

1、在后台控制面板里面建立一个数据库,先别急着做manage.py syncdb
2、到phpMyAdmin里面,在左边的列表中选中这个数据库
3、然后在右面那一行tab按钮中点击“操作”(Operations,那个带“工具箱图标”的tab)
4、打开新页面后在最下面Collation处选择utf8_general_ci,点击”Go”按钮

好了,现在你可以manage.py syncdb了,新生成的表都是utf-8编码,不会有数据库编码的问题了

BTW:
另外一个不爽的事情是bluehost上面没有jpeglib以及freetype2,所以前面做的那个Captcha不能直接在bluehost上用,我改了一下,用的是“聊胜于无”的default font,字体小,所以我在生成网页的时候做了一下放缩(指定width和height)