用uwsgi和nginx来跑moinmoin

抽了点时间把Woodpecker的wiki放到了uWSGINginx下来了,中间有一个小地方折腾了我好几趟,所以记一下。安装之类的就不说了。

在Nginx里配置了uwsgi_pass之后,访问wiki一直会多带过去/moin这个url_prefix,所以默认的设置对于wiki放在根下的人来说可能什么都不用动。我以为是uwsgi处理的时候是把/moin也当成一个页来处理的。所以就想着把/moin从$request_uri里直接拿掉,把后面的部分传给uwsgi。

if ( $request_uri ~ ^/moin(.*)?) {
set $wiki_uri $1;
}
uwsgi_param REQUEST_URI $wiki_uri;

这条路不通啊。中间还试过其他的参数,跳开不说了,最后在uWSGI的wiki:RunOnNginx里有一句关键的话

The WSGI standard says that the SCRIPT_NAME is the var used to select a specific application. The “uwsgi_modifier1 30” option set the UWSGI_MODIFIER_MANAGE_PATH_INFO. This per-request modifier instructs the uWSGI server to rewrite the PATH_INFO value removing the SCRIPT_NAME from it.

所以直接在Nginx的conf里这样写

uwsgi_param SCRIPT_NAME /moin;
uwsgi_pass unix:///tmp/woodpecker.moin.sock;
uwsgi_modifier1 30;

就可以了。这三句应该和Apache里的 WSGIScriptAlias /moin/ /path/to/moin.wsgi是一致的。

uWSGI的性能看起来不错,不过我还没有做什么测试,也没有数据佐证,凭感觉说一下而已。Nginx的文档里什么也没留下来,这一点很不好。不过Nginx的文档一直很烂。

Updating: 抽出了点时间看了一下,大概比apache+mod_wsgi快了1.5倍以上。下面是Moinmoin的timer数据。

item    apache+wsgi nginx+uwsgi
Page.execute    1.933   0.807
Page.execute|1  1.808   0.732
Page.execute|2  1.047   0.446
getPageList     0.251   0.014
init    0.048   0.006
load_multi_cfg  0.031   0
run     2.481   0.981
send_page   2.462   0.972
send_page_content   1.938   0.813
send_page_content|1     1.834   0.762
send_page_content|2     1.096   0.501
send_page|1     1.847   0.773
send_page|2     1.119   0.522
total   2.529   0.988

设置自己的iPhone

基本上是标准化作业。

  1. Use Umbrella backup SHSH.
  2. Jailbreak, battery percentage enable, without baseband upgrade. install cydia.
  3. Add gfwinterceptor, hakulo.us, ultrasn0w,weiphone repo source.
  • http://cydia.ifuckgfw.com
  • http://repo666.ultrasn0w.com
  • http://cydia.hackulo.us
  • http://cydia.myrepospace.com/wiim
  • http://apt.mirrordev.com
  • http://apt.weiphone.com/cydia/
  • Install ultrasn0w, appsync, OpenSSH, GoogleMap Fixer via Cydia.
  • Change root’s password.(alpine)
  • Google Map Fix还要设置一下,滤掉Map程序,因为maps没有偏移。

    update: weiphone的源不用了,维护的太差了。

    国家地理广告里的一句话

    If you are, you breath. If you breath, you talk. If you talk, you ask. If you ask, you think. If you think, you search. If you search, you experience. If you experience, you learn. If you learn, you grow. If you grow, you wish. If you wish, you find. If you find, you doubt. If you doubt, you question. If you question, you understand. If you understand, you know. If you know, you want to know more And if you want to know more, you are alive.

    你活着,你就会呼吸。你呼吸,你就会交谈。你交谈,你就会提问。你提问,你就会思考。你思考,你就会探索。你探索,你就会体验。你体验,你就会学习。你学习,你就会成长。你成长,你就会期许。你期许,你就会寻找。你寻找,你就会质疑。你质疑,你就会提问。你提问,你就会理解。你理解,你就会知道。你知道,你就会想知道更多。你想知道更多,你就活着。

    YouTube: National Geographic Channel – IF. Live curious.

    再说说打孩子

    周末从图书馆回来在地铁上遇到了一对夫妻带着一个孩子,四五岁的样子,额头上有三条新伤,刚结痂。那个孩子很不消停,对他爸妈大声吼叫,甚至对他爸爸挥拳、啐唾沫。他爸爸假装一副生气的样子,不过没唬住。说实话,我当时差一点没忍住就要动手了。

    这个事情让我想起我的那个不打孩子的誓言,我想如果我的孩子成了这样,我一定得让他知道什么是王法。当然这并不是说我赞成打孩子,而是这样的孩子已经失去理智了,必须让他有所畏忌。

    反之再想,孩子也不是一朝一夕变成这样的,他变成这样必然是受了某种影响的,这种影响可能大多来自于父母。

    养不教,父之过。

    planet的https的bug

    前几天给啄木鸟设置planet,发现拿不到https站下的东东。调了一圈发现是这个问题

    TypeError: ssl() argument 1 must be _socket.socket, not _socketobject
    

    Google了一圈是timeoutsocket.py的问题,就给删除了,但是依旧不行。最后看到了redhat的bugzilla里有报这个bug,顺藤摸瓜找到了一个可用的patchplanet实在是年久失修了。