Drupal & Yii & Django

这个礼拜看了大量的Drupal的相关文档,起因是想找一个带后台CURD管理的框架。
CodeIgniter还是比较简易。

Drupal是一个CMS,也可以看成是一个框架。
Drupal的钩子机制很巧妙,用钩子实现了类似interface的东东,且和interface相比,不用实现全部的钩子。
Drupal可以自建字段,看了一下它的数据表结构,自建字段是靠INNER JOIN来实现数据查询,蛋疼。
且它的一些模块功能超出了我的一些需求,有点重。文档也很多看不过来。

于是想到之前膘叔在Blog提到的Yii,研究了一下,泪牛满面。。
这个就是我想要的框架:自带CURD管理,以及代码生成工具Gii,如果你弄过Django的话,你可以在Yii上看到Django的影子。

选择一个适合自己的框架,然后专注于业务吧,其他都是浮云。

GAE总结备忘

webapp是gae自带的一个小框架,但是考虑到后期移植性,这个就先不用考虑了。
Django是个好东西,太重了,gae-helper 版本本地环境启动都很长时间。
正在用web.py,网上逛了一圈,据说douban的后端以及sohu的mail是用web.py

web.py 在 gae 上除了网上总结的:

1、main=app.run() 改为 main=app.cgirun()
2、python web/template.py –compile templates

还有就是 模板不能用frender方法,比如:
render = web.template.frender(‘templates/home.html’) 这样就会报错

ImportError: No module named parser

web.py 的官方也没提到这一点,我用的是0.36版本。

还有一点就是:
文档不可信,代码才可信。。。
在折腾的过程中被web.py的官方文档小误导了一下。。

== 继续总结 ==
GAE数据导入就不要去看中文的文档了,落后不少,推荐个文章:

用新版Bulk Loader往GAE datastore上传XML数据

利用命名管道实现nginx日志的多时区

一个应用场景需要在同一个机器上产生不同时区的日志。

方法:
建立命名管道,将nginx的日志写到命名管道,然后写个脚本接受命名管道的数据并且将时间转换到对应时区之后再输出到新的日志文件。

需要注意的地方就是要先运行脚本接受命名管道的数据,不然nginx在进行reload的操作的时候会卡住,over。

另外提供一个刚找到的好东西:http://trac.nchc.org.tw/cloud/,看台湾的技术文档实在是件很惬意的事情。

php : variables_order

The presence and order of variables listed in this array is defined according to the PHP variables_order configuration directive.

php.ini : variables_order

Sets the order of the EGPCS (Environment, Get, Post, Cookie, and Server) variable parsing. For example, if variables_order is set to “SP” then PHP will create the superglobals $_SERVER and $_POST, but not create $_ENV, $_GET, and $_COOKIE. Setting to “” means no superglobals will be set.

一个RewriteCond应用到多个RewriteRule

默认情况下 RewriteCond 只应用到 其紧跟着的 RewriteRule。

手册里有个 RewriteCond backreferences :
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
貌似可以实现一个RewriteCond应用到多个RewriteRule,不过看了一下不知道怎么用。

Ask Google大神找到了一个老外的解决方案:
http://my.galagzee.com/2009/02/11/mod_rewrite-one-rewritecond-to-many-rewriterules/

RewriteCond %{REQUEST_URI} !^/(pattern1|pattern2|pattern3)(/[0-9]+|/P[0-9]+|)[/]?$ [NC]
RewriteRule . – [S=3]
RewriteRule ^/([^/]*)[/]?$ /index.php/site_embeds/department/$1/X [L]
RewriteRule ^/([^/]*)/([0-9]+)[/]?$ /index.php/site_embeds/article/$2/$1 [L]
RewriteRule ^/([^/]*)/P([0-9]+)[/]?$ /index.php/site_embeds/department_archive/P$2/$1 [L]

RewriteRule 有个 S 参数,可以用来跳过其后续一定数量的规则。
然后对RewriteCond的条件取反,就可以实现了。