Archive for July, 2007

Feisty安装apache2遇到郁闷的问题

Wednesday, July 25th, 2007

在 ubuntu feisty 上用 apt-get 装 apache2,安装完成后 /etc/init.d/apache2 无法启动,没有任何返回,/var/log/apache2/error.log里面也没有任何信息!用 apache2ctl start 启动提示没有设置 ServerName,好说,在 /etc/apache2/ 创建一个 httpd.conf,里面加上 ServerName localhost。再 apache2ctl start 没有错误提示了。这个情况有人遇到过,他猜测因为先前装过 apache,那我八成是因为先前装了 nginx, bull shit!

再运行 /etc/init.d/apache2 start 仍然无法启动!看 error.log,有如下错误:

[Wed Jul 25 18:06:12 2007] [error] cgid daemon process died, restarting
[Wed Jul 25 18:06:12 2007] [error] (2)No such file or directory: Couldn’t bind unix domain socket /var/run/apache2/cgisock.18746

竟然是个bug,而且已经关闭,因为在Gutsy Gibbon已经修复…feisty里怎么修复?没弄明白。Apache Mail List 上也有一个关于这个问题的修复,试了没用!

How to remove Nginx from Ubuntu Feisty

Wednesday, July 25th, 2007

Feisty中的Nginx有问题,不能用 apt-get remove 卸载。方法看这里

前所未有的遭遇死机

Tuesday, July 17th, 2007

Ubuntu 上用 ruby 的 REXML 去 parse 二十几万个 xml 文件,内容很简单,文件也很小。遭遇不确定性死机,甚至有一次直接重启了。昨天一边 parse 一边往 mysql 里插,在50万左右的时候再次死机!

死机之后 mysql 表损坏,进入数据库文件的保存目录(ubuntu上是 /var/lib/mysql, 郁闷的是数据库目录除了mysql用户其他人没有任何权限),用myisamchk –recover tbl_name.MYI 把表修复好。
机器,Ubuntu,ruby REXML 一定是其中之一不可信赖。今天在我那刚升到 10.4.10的 Tiger 上试试。

3 ways to invoke a method in Ruby

Thursday, July 12th, 2007

string = “Hello”

string.method(:length).call
string.send(:length)
string.length

Ferret中搜索中文

Monday, July 2nd, 2007

上次看ferret没有找到搜中文的好办法, 今天再死磕一次.

发现acts_as_ferret都进gem了…但是还是不能搜中文!

最终找到一个支持非拉丁语系言语搜索的插件, 作者自己写了一个Analyzer, 装上就OK了, 姑且算是一个办法, 至于质量和具体的实现方式接下来再考证.

还有一片来自宝岛上的文章可以看一下.

[Update 200-7-3] Generate index from mime-type file with ferret
我为什么要用ferret,原因在于招聘系统收到了大量的简历,80%为MSWord,10%+为PDF,一个一个打开看受不了,想用关键词搜索。所以提出一个方案-招聘系统不接受附件,简历直接扔到textarea里面,这样不就能查了么。于是乎Rails重新完成一套系统,时间不超过3天,而用SQL like去查又太小儿科了,数据多了也受不了。于是乎想到Ferret

但是简历在线编辑就爽么?我精心制作的CV岂不是就没意义了!

对用户上传的简历做索引才是王道!于是乎找到了一个叫ff的小工具,利用pdf2text,html2text,antiword 抓出文件内容再利用ferret做index,还可以和rails集成!

[Update 2007-7-3] Run ferret in DrbServer
在production环境下你那一群mongrel很可能跑在N多application server上,这时不能让每个server上都维护一个local ferret,于是乎我们把ferret跑在一个远程的DrbServer上面。方法很简单,acts_as_ferret已经为我们做好了封装,而Drb也是跟随ruby作为内嵌库来的。

不过我发现了一个问题,用gem安装acts_as_ferret后缺少配置文件config/ferret_server.yml 和启动脚本script/ferret_start ferret_stop,应该说是装gem的时候这几个文件没放对地,我手工copy过来也不能用,原因大概是没有正确的require ‘acts_as_ferret’,不知道是我gem装的有问题还是这gem有问题。

最终还是用plugin的方式安装了acts_as_ferret,一切正常。修改一下ferret_server.yml配置文件,script/ferret_start启动DrbServer。再修改一下model,加上:remote => true。Finish!

之后又遇到一个问题,如果需要和其它东西一起做混合式搜索,比如一张表只有一个字段想用ferret处理,其它字段仍然用sql处理怎么办?一个在DB里搜,一个在索引里搜,hack一下代码把两者mix起来?那最终在做pagination怎么办,能处理offset和page number limit么?

最终还是时间优先,采用最简单的方法,ferret搜索的时候用find_id_by_contents查出所有的匹配id,再与其它条件一起放到sql的where条件里搜。两分钟修改完成。

关于DrbServer的配置方法可以参考官方wiki