江边闲话集

12/21/2007

Ruby不支持中文

Filed under: 一技之长 — Tags: — 张太国 @ 17:29

一直用Ruby那么久了,但是从来没有像今天一样尴尬。因为我还没有真正意识到ruby不支持Unicode。
从接触ruby到现在,都是使用英文,今天偶尔想写个小应用程序来获取一些中文信息,没想到结果是乱码,其实我早应该知道这样的,毕竟不支持Unicode呀。即便如此,我仍然在心里面责备自己太无知了。
网上流行了很多包来解决此,而且ruby的作者也说在下一个版本中支持。但是按照ruby这样的速度开发下去,不知道是何年何月呀。

最后再次BS一下自己。

11/12/2007

山 III

Filed under: 闲情逸致 — Tags: — 张太国 @ 17:40

前面已经写了2篇关于山的文章,如果有兴趣可以参考前面的文章。
还是让自己直接切入主题吧。

中山陵
南京留给我最深印象之一是中山陵。当时去中山陵的时候,还记得自己心里特别不快,也许就是为了去散散心吧。自从去了中山陵,自己的心情的确好了很多。也许正是这样堂皇的理由,才让我更加对它具有好感。
中 山陵位于钟山风景名胜区内,紫金山东峰茅山的南麓。西邻明孝陵,东毗灵谷寺,傍山而筑,整个建筑群依山势而建,由南往北沿中轴线逐渐升高。个人感觉挺大 的,也许以前去过的山太多了,所以其他地方也没有走,就参观了一下孙中山先生的陵墓,然后爬了爬石坊,这个石坊台阶也蛮多了,不过和五台山那的台阶相比, 就差远了。当时去的时候是下午,天气比较炎热,但是在这里,空气相当好,绿茵匆匆,蓝色的天空还有几朵白云,也许这是南京最后的一片净土,当然有些夸张 了,但是足以说明空气是如何程度的好。
遗憾的是游客太多,心理面当时就很那闷,这么个大热天,大家难道都和我一样心情不爽,但那绝对不可能的。最后参观完之后,跑下来找个阴乘起凉来了。看着成群的人们,心里平和很多,也被这嘈杂的环境完全给湮灭了。
上 面说的完全从自己主观出发,其实客观上讲,中山陵确实是一个好去处,你要是在南京绝对找个僻静的地方,这是一个不错的选择,可能你会问,你上面介绍的不是 说很多人们,确实如此,因为上面说的是中山陵的精华,当然有很多人,你可以稍微往远处走一走。总结一下,得出以下结论:

  • 如果你想找个安静的去处,中山陵是个不错的选择
  • 如果你认为南京没有好玩的地方,中山陵也许能让你改变这个想法。
  • 如果你觉得心情烦恼,中山陵绝对是一个安心之处。
  • 如果你尊敬孙中山先生,中山陵你不得不去。
  • 如果你觉得南京除了梧桐,没有绿地,中山陵让你感到很诧异。

娘子关
也不什么时候娘子关这个词进入自己的大脑,每次坐石太线都会经过这里,遗憾的是路过N多次,也无缘下来走一走。每当经过这里,我就在想古时候我的前辈们是如何守在这里的。娘子关是山西和河北的交界处,地势险要。历经几千年,这里的文化也正如娘子关一样屹立在我们心里。
我只能从火车窗户口望望,和黄土高原的很多山岭一样,带着一点荒凉,不过感觉非常好,荒凉是荒凉,也不至于能看见见大片的石头和黄土。
直至自己看不清楚时,也才几十秒的事情,但是每次都能震慑自己的心,这种震撼在渐渐远行的列车上激昂起来。

(本系列未完)

11/07/2007

Apache官网不能访问

Filed under: 一技之长 — Tags: — 张太国 @ 15:59

http://www.apache.org居然不能访问,难道是域名过期,还是交不起托管费?

11/04/2007

山 II

Filed under: 闲情逸致 — Tags: — 张太国 @ 10:40

今天写写的这篇山的文章是继续前一文章

官地
没有几个人能知道这样的地方,也没有人注意这样的地方,但是在中国的土地上居然就有这么一个山地,而且这个山地造就了如今中国第二大煤矿公司。也许大家都知道中国神华,因为其煤炭。但是你知道谁是第二?那就是西山煤电。
西山煤电的资源就是从下面来的。也许就连当地的居民可能只知道西山煤电,而不是知道官地这个地方吧。
官地,这个名字真是有点玄乎,正如其名,它留给我的东西我这一辈子不能忘记。
6年前,一个人去了一趟,在路途中,看见一辆接一辆的大卡车拖着煤,在那坑坑洼洼的水泥路上走着,偶尔一阵煤灰扑面而来,我知道我自己快要到了官地。放眼望去,黑黑的山在那里屹然着。本来汽车是要到官邸内下的,但是我还是在外面下了,因为一些事情触动了我的心。
走 在不窄不宽的煤灰路上,发现有一些矿工朋友在那破破烂烂的小屋门口蹲着,我明白,他们可能刚刚从矿井出来。看着他们木纳的表情,我被他们触动了。这些矿工 朋友眼神里流露出来的那种麻木神情,相信这个世界上的任何人看见了都忘不了。继续往前走,看见有些矿工朋友拿着瓷盆,里面就这一点大烩菜,然后几个馒头, 也许这就是他们的一顿饭。这些朋友都是干体力活的,恐怕这点不够吧。大部分人都是从外地过来打工的,其实挖煤收入相对不错,但是其风险性也是非常高的,他 们为了省吃俭用,目的可能就是为了多挣点钱。去的时候正直12月份,天气非常严寒。他们很多人就在这寒风中吹着。如果你往前仔细看,你胡发现多少煤粒已经 嵌入到了他们的脸部,到肉里面去了,这是生活给他们留下的唯一烙印。
从头到尾,我没有见过一个矿工朋友在微笑。但是,看见微笑的,看起来像是领导级的人物。到了官地之后,有很多当地的居民,他们大包拎小包的从公共汽车上下,又说有笑,看样子刚刚去市里头逛了一圈,买了不少吃的,喝的等消费用品。
这和前面的矿工朋友形成了鲜明的对比,不管怎么说,这就是现实。
接下来,往里走,发现了一节节从矿井运煤的小车躺在铁轨上,一直通向矿井口,我不知道这些小车在它们行业里叫什么。反正就是煤从下到上的工具。
望着前面一些不太高的,但是有黑漆漆的小山,难道这些山不是山而是煤么?显然不是,只不过这里生产煤,而导致这些山的表面铺满了煤灰而已。矿工们就在这些小山的下面长年累月的工作者,生活着。
时隔很久,一直不能忘怀,今年在电视上看见该省省长为了解决职工的住房问题,才发现自己一直在关注着,心理面突然热了,突然对该省长产生好感。
官地,其实是个地名,那里有些山,山下有煤。令我感触最深的地方之一。

太新线
对国家铁路了解的人知道太新线的意义。太新线是从太原到新乡的一条铁路,建设难度非常之高。
那么我为什么把这条铁路拿出来说事?那是因为它走的线路旁边的山非常要险的缘故。走过这条线的朋友都知道,这条线穿过很多山洞,我记得最长的一个山洞火车大概走了5分钟。这是非常了不起的,因为这条线修建的特别早,当时设备也没有现在这么发达,很难想象它是怎么修建成的。
穿 山洞恐怕要比在2座山之间修桥简单。记得有一次,火车陡然慢了下来,我往外面忘了一眼,才发现前面有山,当时也没有注意到火车就在悬崖之间的桥上行走,一 旦我发现之后,心理面凉了一下,因为旁边的山谷看样子是见不到底的。晕,之前从来没有见过这样的情景。只听见火车哐,哐的声音。火车特别慢,要是快了,恐 怕意外就会发生,真是觉得命在顷刻之间。
既然说到山,那就描述一下吧,山比较荒凉,全是石头,书目不多,但是偶尔从石头缝里蹦出一些灌木来。
说它的目的就是为了赞扬一下咱们中国的老百姓的智慧。

未完待续

11/01/2007

Filed under: 闲情逸致 — Tags: — 张太国 @ 17:58

山,从小就希望自己站在高高的山上。当时只是从课本上知道世界上还有上。看看电视上的山,梦想自己哪天要是真见到山时是一种什么样的心态。

儿时的山
在读大学之前,从来没有见过山。甚至弱智的认为,我 们家乡根本没有山。确实,我们家乡在江汉平原广阔的土地上,据说最高的山也就50m高,当然,到现在我也没有机会目睹这我们那最高的山,真的感到非常遗 憾。其实听长辈说那也不是什么山,只不过我们那边茫茫的平原一块,50m高的当然称得上山了。当然,以现在的观点看,就是一点土坡而已,上面密密麻麻长了 几颗老树,我在怀疑有没有石头呢。

那个时候我的地理知识应该算是贫瘠中的精品,居然不知道自己所在的省是什么地貌。到了后来,才知道由70%的丘陵,20%的平原,加上10%的山区组成。 开始以为是全国比较大的一省,因为人口众多呀,后来才知道也不不过才18W而已,当然,说大也大,说小也小,关键是和谁比了。

绵山
真正第一次去过的山石绵山,位于山西省介休市,当时是班上组织去的。遗憾的是,去的时候正是绵山开发阶段,很多还没有修好。记得我和我们宿舍的两哥们小鹏 和猪一起走到了终点,遗憾的是时间有限,辅导员开始催了,后来我们几个人在那里说到,在大学四年期间,我们一定还要来一次,弥补这次的缺憾。
绵山是我见过在山西比较漂亮的山。当汽车开在盘山公路上时,遥望远处的村庄,就好象地球上看月亮似的,非常美,因为山西地处黄土高原,远处的村庄犹如坐在 大片大片黄金上,相当壮观。我顺势往汽车外忘,我的天呀,下面的山谷真是够危险的,真不知道心里面是什么滋味,要是一不小心出了什么问题,咱们可是必死无 疑。
第一次见到山是如此的兴奋,以至于我们几个马不停蹄的往前冲,山上的树,树上的鸟,鸟下的河,真是一副名副其实的山水画。特别是有条河,水真够清的。最后 蹦了大约半天,停停玩玩,吃吃喝喝,没想到到了最前面。往我们后面一望,居然其他的同学一个也没看见。但是离终点(水帘洞)还差一段距离。来了一次不到终 点多没劲,于是吭哧吭哧跑到了那,呆了短暂几分钟,后面有同学过来叫我们,晕,要撤离了。遗憾呀,于是也就有了上面说的约定。

既然说到约定,我最后还真的来了,可惜猪和小鹏没有来。当时有人组织去,而自己自己又不想学习,毫不犹豫的报了个名。打电话给小黄约她,小黄欣然同意。不 幸的事情发生了,这帮组织人居然在出发的前一天晚上掉链子,说人不够呀什么的,但是想砍了他们的心都有。算了,你们不去,老子自己去。第二天5点就起床, 因为咱们学校比较偏,连个出租车都没有,于是和小黄边走边等,终于来了一辆,到了火车站之后,看了列车时刻表,晕,北京到韩城的火车再过7分钟就发了。也 不买票了,直接上车去补吧。
7:30左右到介休火车站,吃了碗刀削面,8:30从介休市出发。这次来感觉不一样,一是和不同人在一起,另外这次绵山修好了。遗憾的是,修好了可是人多 了,人多了当然就不爽了。还好,比我想象中的要好,加上那天天气不错,心里面就在想,叫你们掉链子,不来是你们的损失。下午3点就到了终点,才发现终点好 冷,不知道洞里有没有鱼呢。

总之,绵山是一座不错的山。我喜欢。

学校附近的山
每次起床,往窗口一站,远处的山就在我面前。光秃秃的山,山上面偶尔有几颗小树,偶尔也能看见几根电线杆。山的颜色是灰白灰白的,一看就知道特别脏。我们有去过跟前,据说对面宿舍的人去了,回来破口大骂,下面的会足足有10cm厚,直接令人抓狂。

桂林的山
桂林的山是另外一种不同的感觉,特别寂静。和山西的山形成鲜明的反差。桂林的山一般不高,特别是市里头的,爬爬就没了。由于地质的原因,桂林的山有很多钟乳石。比较有特点,这和云贵高原的山有一些类似之处的。毕竟所处的纬度差不多。
桂林的山比较多,但是要说有个性,我不这么认为,小学课本上说桂林山水甲天下,确实是那么一回事情。我去的第一天,哇塞,够漂亮,够清秀,太爽了。第二天,怎么发现都一样呀,兴趣骤减。第三天基本上没什么兴趣,还不如去逛街呢。
所以,我觉得桂林的山水不错,但是不宜太久。

河池的山
河池市就在山脚下,在其大街上看,远远的就能看见有山为你遮风挡雨。 既然河池在山下,旁边都是山,所以不用奢望这个市有多大。旁边的山是灰色的,看起来时间应该有个千万年了吧。随便说说,我是不知道有多长,但是时间肯定是 非常漫长的。高高的山,有很多突出的石头,有时候石头缝隙里一不小心就有一堆灌木群,当然,除了灌木外,大树也是必不可少的。
这和桂林的山比起来,感觉沉稳多了。

宜州的山
刘三姐的故乡,正如刘三姐一样,山也漂亮。感觉有的山河桂林的山差不多,有的又有浙江这边山的韵味。

五台山
在五台县小琴家呆了一个礼拜。帮它们家里去挖大葱,当然我也吃了到现在为止最好吃的土豆饼,土豆粉。真是太棒了。说远了,呵呵。小琴家旁边就有山,每天起来都去爬爬山,这山不是特别高,但是荆棘密布,其实对当地人来说没什么,但对我来说还是比较多的。
站在山顶山,看看下面的村庄,烟雾缭绕,真是古时候诗词那样写的。太美了。
这里的空气特别清新,以至于我后来都不想回了。
当时到达五台时是在晚上,因为当天不能到小琴家,于是找到了小琴家的姑姑借宿一宿。我怀疑那天是30,晚上天也够黑的。随便吃了一些东西,有土豆饼什么 的,然后吃了一些苹果,就睡觉了。晚上不是在他姑姑家睡觉的,而是和一位老爷爷共度一晚上,在去的路上,我看见远处的大山的黑影,觉得自己真的到了世外桃 源。晚上和老爷爷聊了一会,因语言沟通问题,适可而止吧,有点遗憾。
第二天清晨,起床很早,打了声招呼,就跑到了认为是昨天晚上见到身影的山上。爬的时候,才发现山上有很多小路,同时也看到很多刚干完活的朋友们下山,看了 看,还有庄稼呢。真是令人唏嘘不已。以前到过的都是一些景区,而这次摆在自己面前的就是最生活最朴实的大山。山上的松树N多,有时候还有松鼠,真是有趣。 路有时候不好找,只好搀扶着。
因为还要赶路,也没有怎么多逗留就下山了,这次是步行,走的路就是在山脚小,但是马路挺宽的,旁边的山比较普通。
到了五台,肯定要去五台山的,五台山虽然说在山西,但是和我以前看见的山不同。时时刻刻都能体会到一种历史文化在里面。去过五台山的人都知道五台山有五个峰。但是又特别远,一般去玩的人选择一两个就行了。我呢,那次不是去玩,主要就是用心感受一下大自然。
还没有到五台山,远处就能看见白白的雪已经覆盖了山顶。据说,五台山的雪每年5月后才能融化完,所以去那边最后的时期是7-8月份,这个时候不至于太冷。 我是10月去的,当然已经有雪了,要知道10月底就有可能下雪。何况是山顶呢。旁边的树叶非常多,都已经开始变黄了。一般吃饭就是吃点面点什么的,感觉不 错。五台山的空气没有刚才提到的那么好,毕竟是佛门重地和旅游胜地,人自然多了。但不管怎么说,空气还是非常棒的。
五台山本质上说和其它五台的山没有区别,就是因为有5个峰,再加上佛教的影响,自然就不一样了。
远处望着这些山,才发现自己特别的渺小。也许见了山之后,自己的胸径突然一下成指数级的增长。

从五台山回来之后,到小琴家歇息几天。其中我们步行走到了一座在山腰的小寺庙。路还算好走,旁边的山也是高高的,淡黄色的石头,加上一些荆棘,景观真是不错。有的时候发现自己旁边就是一颗野山楂树在那边,饿了,摘几颗下来吃吃。
我们的目的地是那个寺庙。去了之后了解了一下佛学,然后里面的尼姑带着我们参观了一下。我之所以在这里提到这里的寺庙,是因为他们让我尝到了真正的泉水。 清澈,清甜,以致我临走的时候带了一瓶回去。其实,这里的居民吃的都是山泉,当然洗澡也是了。尽管如此,因山泉水不多,所以有的时候会断水。他们在山下面 的小溪里挖了一个口径为1m多的大坑,这样就可以蓄水了。整个村就是这样的。据说,到严寒时,吃水真的是个问题。暂不说水多水少问题,其水真的很甜,难怪 这里的居民这么健康呢。真是羡慕呀。

雁门关
几次坐火车都要经过雁门关。了解历史的人应都知道的。那个时候是军事要地呀。因为其地势原因,至今仍然很有名。山不怎么好看,但是其气势足以让你有点心惊肉跳,很具有威慑力。

佘山
山海唯一的山就是佘山,其实这根本不叫山,土坡子而已,不过比起我老家的那个山,那还是很有分量的,:)。咱就是图这个去的,真是令人大跌眼镜。没什么好 玩的,印象深刻的是佘山天文台和一座教堂。佘山天文台,这个都知道,也许就是因为佘山是上海最高的地方,所以才修建于此。这次嫦娥发射,佘山天文台就是观 测站之一。教堂比较大,因为个人不信,所以也没什么感觉。唯一的印象是大,高,里面的人都很虔诚,我感到非常理解,即使自己不信,但是咱们必须得理解这是 一种信仰,信仰懂不懂。

狮峰
龙井哪里最好?当然是狮峰龙井。周围全是茶树,让你体验一把什么叫茶的故乡,这就是茶的故乡。有人说杭州不好玩,那是因为你没有到好的地方,有人说杭州的 某些茶不好喝,那是因为你没有喝到好喝的茶。下面有很多茶农,他们家里都自己卖的。好坏嘛,至少比市面上售的普通茶要好。价格还比较实惠。
我之所以把这些拿出来,因为其茶,如果你想了解茶文化,这个地方不得不去。

八达岭
北京的八达岭举世闻名,咱也不用多说,去看看就知道了。爬长城是一种享受,你会为它的雄伟而折服,你会为它的历史而缅怀,你会为它的构造感到惊诧。人类的结晶呀!秦始皇,NB!秦始皇下的老百姓,更NB!
长城有几处比较险要,这是一种乐趣,如果你有恐高症,心脏病的话或者什么的,建议不要去了。
去长城,个人建议去北长城。不过人真是够多的,谁叫人家是奇迹之一呢。

暂时就这么多,以后还有哟。

10/16/2007

又是卡巴斯基的问题

Filed under: 一技之长 — Tags: , — 张太国 @ 11:26

今天用到Intellij IDEA 6.0,令人奇怪的是没法调试。给出的错误提示是:
 Error running DEBUG,Host address localhost:8080 is already in use.
既然再用,于是我将Tomcat关了,因为tomcat使用了8080端口。try again. 依旧如故。
输入netstat,没有发现8080端口的使用。
怎么办?第一个考虑到的是防火墙的问题,因为IDEA调试调用了端口。于是快速到控制面板的安全设置里将8080端口以及所用到的debug端口加入到允许列表中。
遗憾的是这样是失败的。
没办法,看了看IDEA的help文档,总的来说该文档对我来说毫无价值。于是跑到官方网站,可惜的是教你怎么做,但是没有troubleshooting。接下来去哪里?按照经验,社区是个不错选择,遗憾的是没有类似问题。我就不明白装了卡巴斯基的人就没有碰到该问题。看来自己太背了。
最后也没有解决。
在下班的时候,看见卡巴斯基在那里扫描,眼前一亮,是不是他的问题呢?赶紧pause它,居然好了。
又是卡巴斯基的问题,上次SVN也是他的问题。看来得把它加入重点观察对象。
解决方法:

  •  打开卡巴斯基
  • 选择Protection下的Web anti-virus,右击点击settings
  • 选择Connectivity的HTTP
  • 点击Port Settings
  • uncheck 8080端口即可

其他杀毒软件可能也有类似情况。

本文关键字:
IDEA, 卡巴斯基,调试,端口,防火墙

09/26/2007

在Debian上部署Rails Apache+fcgi(或FastCgi)

Filed under: 一技之长 — Tags: , — 张太国 @ 15:26

Rails+Apache2+fcgid安装

安装Ruby

tar xzvf ruby-1.8.6.tar.gz
cd ruby-1.8.6
./configure
make
make install

    
检查一下ruby是否安装,输入:

ruby -v

安装zlib

tar xvzf  zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
make
make install

安装rubygem  

tar xzvf rubygems-0.9.4.tgz
cd rubygems-0.9.4
ruby setup.rb

为了看是否安装上,输入:

gem -v

Rails

gem install rails -y

 有的时候可能因为网速问题装不上,请耐心多试记下.

测试

rails testRails
cd testRails
ruby script/server

 

 

 

 

会有如下显示:

=> Booting WEBrick…
=> Rails application started on http://0.0.0.0:3000=> Ctrl-C to shutdown server; call with

   –help for options
[2007-08-15 08:02:04] INFO  WEBrick 1.3.1
[2007-08-15 08:02:04] INFO  ruby 1.8.6 (2007-03-13) [i686-linux]
[2007-08-15 08:02:04] INFO  WEBrick::HTTPServer#start: pid=16306 port=3000

 

ImageMagick

tar xzvf ImageMagick-6.3.5-6.tar.gz
cd ImageMagick-6.3.5
./configure
make
make install

看是否安装成功,输入:

usr/local/bin/convert logo: logo.gif

 

 

安装RMagick

tar xvzf RMagick-1.15.10.tar.gz
cd RMagick-1.15.10
./configure
make
make install

安装fcgi

由于rubyfcgi支持库需要在编译的时候联接FCGI的系统库,因此我们需要先安装FCGI库,下载FCGI源代码发行包:

http://www.fastcgi.com/dist/

tar xzvf fcgi-2.4.0.tar.gz

cd fcgi-2.4.0

./configure –prefix=/usr/local/fcgi

make && make install

 

 

 

 

 

安装fcgid

apt-get install libapache2-mod-fcgid
/etc/init.d/apache2 force-reload

 安装fcgi for ruby

gem install fcgi

配置apache

可以如下

   NameVirtualHost *
<IfModule mod_fcgid.c>
       AddHandler fcgid-script .fcgi
       SocketPath /var/lib/apache2/fcgid/sock
       DefaultInitEnv  RAILS_ENV production
       IdleTimeout 600
       ProcessLifeTime 3600
       MaxProcessCount 8
       DefaultMinClassProcessCount 3
       DefaultMaxClassProcessCount 3
       IPCConnectTimeout 8
       IPCCommTimeout 48
   </IfModule>

<VirtualHost *>
    ServerAdmin webmaster@localhost
    #ServerName localhost
    DocumentRoot /path/to/app/public/
    ErrorLog /xxx/log/httpd-error_log
    CustomLog /xxx/log/httpd-access_log common
    
   <Directory
/path/to/app/public/>
      Options ExecCGI FollowSymLinks
      AllowOverride all
      Order allow,deny
      Allow from all
   </Directory>
</VirtualHost>

配置应用程序

编辑.htaccess文件

注释 AddHandler cgi-script .cgi以及AddHandler fastcgi-script .fcgi,增加AddHandler fcgid-script .fcgi.

RewriteRule ^(.*)$ dispatch.cgi [QSA,L]改为RewriteRule ^(.*)$ dispatch.fcgi [QSA,L].

可以如下:

# General Apache options

AddHandler fcgid-script .fcgi

Options +FollowSymLinks +ExecCGI

RewriteEngine On

RewriteRule ^$ index.html [QSA]

RewriteRule ^([^.]+)$ $1.html [QSA]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

ErrorDocument 500 “<h2>Application error</h2>Rails application failed to start properly”

编辑dispatch.fcgi

加入

require ‘fcgi_handler’

require ‘rubygems’

require_gem ‘fcgi’

需要注意的是,我们一般都是在windows平台开发,然后部署到linux上去,如果您属于这种情况,请注意文件的第一行编译器

的设置.windows上可能是:

#! C:\ruby\bin\ruby

需要改成

#! /usr/local/bin/ruby

问题解答

Q:如果C编译器没有安装,应该如何安装呢?  
A:debian上使用如下命令:

apt-get install build-essential

 
Q:如果出现以下错误:

<— lib
/usr/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:4:in `require’: no such file to load — zlib (LoadError)
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:4
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:8:in `require’
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:8
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:504:in `require’
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:504
        from /home/confach/pkgs/rubygems-0.9.4/./post-install.rb:81:in `require’
        from /home/confach/pkgs/rubygems-0.9.4/./post-install.rb:81:in `install_sources’
        from /home/confach/pkgs/rubygems-0.9.4/./post-install.rb:116:in `run_hook’
        from setup.rb:1526:in `exec_task_traverse’
        from setup.rb:1342:in `exec_install’
        from setup.rb:1000:in `exec_install’
        from setup.rb:814:in `invoke’
        from setup.rb:773:in `invoke’
        from setup.rb:1578

 我该怎么办?

A:说明zlib无法加载.解决方案:

cd ruby-1.8.6/ext/zlib/
ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
make
make install

Q:如果利用查看fcgi for ruby是否已经装上?
A:请调用gem list,看是否fcgi在其中

Q:如果我利用gem install fcgi 安装不上怎么办?
A:很简单,下载其源代码然后进行安装:
   

然后就可以安装rubyfcgi支持库了,下载ruby-fcgi-0.8.7.tar.gz

 

http://rubyforge.org/projects/fcgi/

tar xzvf ruby-fcgi-0.8.7.tar.gz

cd ruby-fcgi-0.8.7

ruby install.rb config — –with-fcgi-include=/usr/local/include –with-fcgi-lib=/usr/local/lib

ruby install.rb setup

ruby install.rb install


 
需要注意的是,还是安装上fastcgi.

Q:如我我遇到如下错误怎么办?

mod_fcgid: can’t apply process slot for “xxx/xxx/public/dispatch.fcgi”

A:这个比较简单,修改一下Apache的日志目录权限,例如chmod 755 /var/log/apache2

Q:如果遇见如下错误怎么办?

Premature end of script headers: dispatch.fcgi

A:请先检查一下该文件的配置以及.htaccess.如果问题依旧,请修改一下dispatch.fcgi的权限,至少是755更多详情,

参考我的另一文章:

“Premature end of script headers: dispatch.fcgi”终极解决方案

.

Q:如果提示RewriteEngine拼写错误,或者没有启用该功能怎么处理?
A:非常简单,那是因为apacherewrite模块没有加载.请先检查rewrite模块是否已经安装.然后执行下面的命令:

cd /etc/apache3/mods-available
     nano -e rewrite.load

输入

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

Ctrl+X保存

cd ..
ln -s mods-available/rewrite.load mods-enabled

然后重启apache

/etc/init.d/apache2 restart

Q: 如何选择fastcgifcgid?
A:很简单,如果是apache1.x,选用fastcgi,如果是apache2.x,请选用fcgid

Q:对系统有什么要求?
A:建议采用2.6版本的内核

  
Q:怎么使用ImageMagick无法显示图片?

A:请先调用

/usr/local/bin/convert logo: logo.gif


 

 

如果没法生成或者生成的gif文件无效,请重新安装ImageMagick.在安装之前请安装jpeg,freetype,png,tiff等库.

  • apt-get install libjpeg62-dev或apt-get install libjpeg62  –>jpeg

  • apt-get install  libfreetype6  –> freetype

对于最新的版本,可能要安装ghostscript。

apt-get install  gs

Q:如果访问网站显示的是dispatch.fcgi的源内容,怎么办?

A:一般来说,有2个理由导致:

  1.    没有安装fcgi module。因为没有安装,访问时没法解析。关于安装的问题,参见上面安装fcgi这一节。
  2. 或者是apache不同版本造成的。

09/21/2007

SOHO中国

Filed under: 三言两语 — 张太国 @ 17:41

18个月前,我到北京建外SOHO.白色的几幢写字楼吸引了我,因为和周边的大楼相比较,这几幢楼实在太显眼,甚至看起来有些不相称.当时就想,谁敢在北京盖这白色的大楼.后来才知道这是小潘创建的.OK,先贴张图:

看见没有,灯光最亮的就是建外SOHO.

当我踏入写字楼,感觉不错.大厅里也是乳白色的.第一感觉自己就想是透明的,非常轻,甚至有点像进入仙境的感觉.踏入电梯,比较宽敞,而且较稳.进入写字楼房间,什么都好,唯一不爽的就是每层的高度不够,感觉有点压抑.不管怎么说,感觉相当好.

午餐在其商业铺搞定的,可能是刚建成不久,看起来也没有多少商户.当然吃饭的地方还是有的.餐厅里人不是特别多,价格还可以,不是特别贵.但是最终给我的印象是环境和人气还需改善.想必现在应该好很多了吧.

这次SOHO中国给我的印象是:胆大,具有创意.

回到上海之后,才发现SOHO中国在海南有酒店,在北京有多处SOHU,例如除了建外SOHU之外,还有光华路SOHO,朝外SOHO,SOHO现代城等.

于是我开始关注起来.小潘和王石,冯仑都有着不少的关系吧.

最近这几天,SOHO中国要在香港上市了,发行约15亿股,90%给投资机构,其他给个人投资者,股价约为8.3港元.这是相当不错的融资方案.120多亿,能干很多事情的.这几天小潘在全球路演.希望他一切都顺利.

遗憾的是,如果在大陆投资的话,看起来比较遥远.毕竟还不能到香港去买其股票.但是我个人对SOHO中国还是很看好的.尽管不如万科,万通那么有名,但是其设计,创意等丝毫不差.

最后贴几张图:

SOHU现代城

 

光华路SOHO

朝外SOHO,据说这次上市资金可能用于此

SOHO尚都

长城脚下的公社,(这也能建?)

博鳌博鳌凯宾斯基饭店

最后,有个人不得不提,那就是小潘的爱人张欣.

关于更多详情,参考http://www.sohochina.com

注:本文绝不是给SOHO做广告,再说了,小潘也没有给我广告费呀.

 

 

09/17/2007

mongrel启动问题的解决方案

Filed under: 一技之长 — Tags: — 张太国 @ 16:19

如果使用Mongrel来部署Rails,就不可避免的使用

  1. mongrel_rails start -C mongrel.config  

这里mongrel.config是mongrel的配置文件,可以为:

  1. —  
  2.  :config_script:  
  3.  :environment: development  
  4.  :pid_file: log/mongrel.pid  
  5.  :num_processors: 1024  
  6.  :docroot: public  
  7.  :timeout: 0  
  8.  :host: 0.0.0.0  
  9.  :mime_map:  
  10.  :port: 3000  
  11.  :daemon: false  
  12.  :cwd: /home/linux/projects/mongrel/testapp  
  13.  :includes:  
  14.  – mongrel  
  15.  :debug: false  
  16.  :log_file: log/mongrel.log  

然后到app的根目录下运行上述的命令,恭喜您,你启动成功了.
但是有个问题,如果我不在app的根目录下运行呢?系统会给出我们信息:

  1. !!! Path to log file not valid: log/mongrel.log  
  2. mongrel::start reported an error. Use mongrel_rails mongrel::start -h to get help.  

第一眼看见这个错误,觉得非常简单,Mongrels的创始人给出的答案是将相对路径改为绝对路径.
也许上述的方法能解决问题,但是我相信仍然有一种情况:即使改为绝对路径,还是出现同样的错误.
如果发生上述的错误应该怎么办?
不幸的是,上述的问题我已经碰见过,很长时间不得要领.文档看破皮了,还是不能运行.不得已,打开mongrels的源代码看看.最后发现需要指定工作目录,因为工作目录是在log之前验证的.
摘录一段代码:

ruby 代码
  1. module Mongrel  
  2.   class Start < GemPlugin::Plugin "/commands"  
  3.     include Mongrel::Command::Base  
  4.   
  5.     def configure  
  6.       options [  
  7.         ["-e""–environment ENV""Rails environment to run as", :@environment, ENV[‘RAILS_ENV’] || "development"],  
  8.         ["-d""–daemonize""Run daemonized in the background", :@daemonfalse],  
  9.         [‘-p’, ‘–port PORT’, "Which port to bind to", :@port, 3000],  
  10.         [‘-a’, ‘–address ADDR’, "Address to bind to", :@address"0.0.0.0"],  
  11.         [‘-l’, ‘–log FILE’, "Where to write log messages", :@log_file"log/mongrel.log"],  
  12.         [‘-P’, ‘–pid FILE’, "Where to write the PID", :@pid_file"log/mongrel.pid"],  
  13.         [‘-n’, ‘–num-procs INT’, "Number of processors active before clients denied", :@num_procs, 1024],  
  14.         [‘-t’, ‘–timeout TIME’, "Timeout all requests after 100th seconds time", :@timeout, 0],  
  15.         [‘-m’, ‘–mime PATH’, "A YAML file that lists additional MIME types", :@mime_mapnil],  
  16.         [‘-c’, ‘–chdir PATH’, "Change to dir before starting (will be expanded)", :@cwdDir.pwd],  
  17.         [‘-r’, ‘–root PATH’, "Set the document root (default ‘public’)", :@docroot"public"],  
  18.         [‘-B’, ‘–debug’, "Enable debugging mode", :@debugfalse],  
  19.         [‘-C’, ‘–config PATH’, "Use a config file", :@config_filenil],  
  20.         [‘-S’, ‘–script PATH’, "Load the given file as an extra config script", :@config_scriptnil],  
  21.         [‘-G’, ‘–generate PATH’, "Generate a config file for use with -C", :@generatenil],  
  22.         [, ‘–user USER’, "User to run as", :@usernil],  
  23.         [, ‘–group GROUP’, "Group to run as", :@groupnil],  
  24.         [, ‘–prefix PATH’, "URL prefix for Rails app", :@prefixnil]  
  25.       ]  
  26.     end  
  27.   
  28.     def validate  
  29.       @cwd = File.expand_path(@cwd)  
  30.       valid_dir? @cwd"Invalid path to change to during daemon mode: #@cwd"  
  31.   
  32.       # Change there to start, then we’ll have to come back after daemonize  
  33.       Dir.chdir(@cwd)  
  34.   
  35.       valid?(@prefix[0].chr == "/" && @prefix[-1].chr != "/""Prefix must begin with / and not end in /"if @prefix  
  36.       valid_dir? File.dirname(@log_file), "Path to log file not valid: #@log_file"  
  37.       valid_dir? File.dirname(@pid_file), "Path to pid file not valid: #@pid_file"  
  38.       valid_dir? @docroot"Path to docroot not valid: #@docroot"  
  39.       valid_exists? @mime_map"MIME mapping file does not exist: #@mime_map" if @mime_map  
  40.       valid_exists? @config_file"Config file not there: #@config_file" if @config_file  
  41.       valid_dir? File.dirname(@generate), "Problem accessing directory to #@generate" if @generate  
  42.       valid_user? @user if @user  
  43.       valid_group? @group if @group  
  44.   
  45.       return @valid  
  46.     end  
  47.   
  48.     def run  
  49.       # Config file settings will override command line settings  
  50.       settings = { :host => @address,  :port => @port:cwd => @cwd,  
  51.         :log_file => @log_file:pid_file => @pid_file:environment => @environment,  
  52.         :docroot => @docroot:mime_map => @mime_map:daemon => @daemon,  
  53.         :debug => @debug:includes => ["mongrel"], :config_script => @config_script,  
  54.         :num_processors => @num_procs:timeout => @timeout,  
  55.         :user => @user:group => @group:prefix => @prefix:config_file => @config_file  
  56.       }  
  57.   
  58.      #……  
  59.   
  60.       if @config_file  
  61.         settings.merge! YAML.load_file(@config_file)  
  62.         STDERR.puts "** Loading settings from #{@config_file} (they override command line)." unless settings[:daemon]  
  63.       end  
  64.   
  65.       config = Mongrel::Rails::RailsConfigurator.new(settings) do  
  66.         if defaults[:daemon]  
  67.           if File.exist? defaults[:pid_file]  
  68.             log "!!! PID file #{defaults[:pid_file]} already exists.  Mongrel could be running already.  Check your #{defaults[:log_file]} for errors."  
  69.             log "!!! Exiting with error.  You must stop mongrel and clear the .pid before I’ll attempt a start."  
  70.             exit 1  
  71.           end  
  72.   
  73.           daemonize  
  74.           log "Daemonized, any open files are closed.  Look at #{defaults[:pid_file]} and #{defaults[:log_file]} for info."  
  75.           log "Settings loaded from #{@config_file} (they override command line)." if @config_file  
  76.         end  

看看上面的代码就非常清楚了.
那么如何解决,可以这样:

  1. mongrel_rails  start -c youapp/path/to -C mongrel.config  

这样就OK了.

扩展应用:可以配置为服务自动启动.

09/13/2007

ruby利用mail和sendmail发送邮件

Filed under: 一技之长 — Tags: — 张太国 @ 16:50

在linux上一般都带有mailx,mail或者sendmail,那么如何利用ruby来发送邮件呢?
实现起来并不太难.

思路
mail和sendmail都是linux下的命令,也就是说得让ruby调用这些命令,如何调用,那就是

ruby 代码
  1. IO.popen(sendmail_cmd)  


如何利用mail或sendmail发送邮件

 mail:

  1. mailx -s SUBJECT_CONTENT SEND_TO_EMAIL  

sendmail:

  1. #sendmail -t -v  
  2. To:someone@domain.com  
  3. From:your address  
  4. Subject: your subject  
  5. your email text  
  6. Ctrl_D  

Ruby实现
 
  Emailx:

  1. email_to=["to@domail.com"]  
  2. cc_to=[""ccc@domail.comm"] 
  3. file="attachment-path" 
  4.   sendmail_cmd="(uuencode  #{file};"  
  5.   sendmail_cmd<<"cat body)" 
  6.   sendmail_cmd <<" |mailx -s \"hello\" #{email_to} "  
  7.   pipe=IO.popen(sendmail_cmd)  

     sendmail

  1. pipe=IO.popen("/usr/sbin/sendmail -t -v","w")  
  2. pipe.puts "To: to@domain.com\n"  
  3. pipe.puts "From:Admin<admin@domain.com>\n"  
  4. pipe.puts "Subject: Subject here\n"  
  5. pipe.puts   
  6. pipe.puts "hello,this is email text!"  
  7.   
  8. pipe.close_write  

问题
 其实上面的实现很简单,不过有几个问题:

  • 对于emailx,如何改变from address呢
  • 对于sendmail,如何实现附件呢
Older Posts »

Powered by WordPress