RubyConf 归来
嗯,本来依照一贯的宅男风格,是肯定懒得参与这些活动的,但是这次难得在上海,Matz 又来,前阵子又下定决心不能不喜欢的事情就不去,而且天气难得的凉快,就出发了~
一共 9 个演讲,涉及 Rails 部署经验、Rails 技巧、和 Ruby 企业开发等等,收获颇丰。不过 Matz 没讲啥。
本以为下午肯定撑不住提前闪人,最后还是兴致勃勃的听完了。
最后的提问环节,台下不少问题是关于某两个模式的优劣,某两种语言的优劣,某两种思想的优劣……嘉宾大牛们的答案是啥? 那就是该用什么用什么~
而且很高兴的知道,不少网站都是不同技术的融合体,比如页面用 Rails、全文检索用 Java、邮件用 PHP、生成 PDF 用 C,充分说明了,方式真的无所谓 
又换回了 File Based Session Stroe
早期 Rails 一直是默认用文件保存 session,原来 blog 也用这个,就是 session 文件得经常清一下。
后来换成了 session 数据库表,其实也差不多,定期得清下表。 不过有两次 session 表损坏,导致程序出错,和频繁的更新 session 表有一定的关系。
最后就是目前普遍的那种 cookie session 了,忘了 Rails 2 点几开始有这个的了,这个东西不错,没有那么多乱七八糟的事情。
不过最近大家反应 blog 出现了一些奇怪的现象,比如有的时候登录成功后,发现并没有登录上;评论点击发送后,没有发送成功,也没有错误消息;保存文章也出现了这种情况。
仔细想想,发现这些情况都是从上次升级 Chito 1.1.0 之后出现的,而在 Chito 1.1.0 中才开始用的 cookie session。本地测试也遇到两次评论发送没反应的现象,清楚下浏览器的 cookie 或者刷新下页面就好了。
具体原因不明,大致感觉是保存在浏览器 cookie 中的 session 没有发送成功,然后在服务器那边 Invalid Authenticity Token 了。
随机出现,没有规律,这个比较郁闷。
现在只好又换回了 file session,还是这个放心啊……
啥个原因捏 ![]()
Javascript 相对时间
因为相对时间是随时变化的,所以如果在页面里面直接生成相对时间的文本,那么就没法缓存成静态文件,不过用 js 可以解决这个问题。
首先,在页面里面还是用 rails 生成一般的时间,这样即使关掉了 js,也可以显示正常的时间。并套个 span:
然后就是 js 的事情了,找出这些 span,并且算出相对时间替换进去:
其中的 relative_time_text 接收分钟为参数,返回相对时间的文本:
var text;
if(!rtlang[local])
local = 'en';
if(m <= 1)
text = rtlang[local]['less than a minute'];
else if(m > 1 && m <= 45)
text = m + rtlang[local][' minutes'];
else if(m > 45 && m <= 90)
text = rtlang[local]['about 1 hour'];
else if(m > 90 && m <= 1440)
text = Math.round(m/60) + rtlang[local][' hour'];
else if(m > 1440 && m <= 2880)
text = rtlang[local]['1 day'];
else if(m > 2880 && m <= 43200)
text = Math.round(m/1440)+ rtlang[local][' days'];
else if(m > 43200 && m <= 86400)
text = rtlang[local]['about 1 month'];
else if(m > 86400 && m <= 525600)
text = Math.round(m/43200) + rtlang[local][' months'];
else if(m > 525600 && m <= 1051200)
text = rtlang[local]['about 1 year'];
else
text = Math.round(m/525600) + rtlang[local][' years'];
return text + rtlang[local][' ago'];
}
基本就是照着 rails 里那函数改的,rtlang 就是个 hash,保存多语言信息:
rtlang['en']['less than a minute'] = 'less than a minute';
rtlang['en'][' minutes'] = ' minutes';
rtlang['en']['about 1 hour'] = 'about 1 hour';
rtlang['en'][' hour'] = ' hour';
rtlang['en']['1 day'] = '1 day';
rtlang['en'][' days'] = ' days';
rtlang['en']['about 1 month'] = 'about 1 month';
rtlang['en'][' months'] = ' months';
rtlang['en']['about 1 year'] = 'about 1 year';
rtlang['en'][' years'] = ' years';
rtlang['en'][' ago'] = ' ago';
rtlang['zh_CN']['less than a minute'] = '小于一分钟';
rtlang['zh_CN'][' minutes'] = ' 分钟';
rtlang['zh_CN']['about 1 hour'] = '大约 1 小时';
rtlang['zh_CN'][' hour'] = ' 小时';
rtlang['zh_CN']['1 day'] = '1 天';
rtlang['zh_CN'][' days'] = ' 天';
rtlang['zh_CN']['about 1 month'] = '大约 1 个月';
rtlang['zh_CN'][' months'] = ' 个月';
rtlang['zh_CN']['about 1 year'] = '大约 1 年';
rtlang['zh_CN'][' years'] = ' 年';
rtlang['zh_CN'][' ago'] = ' 前';
这样如果要显示中文的相对时间,那么只需在页面尾部加上:
就搞定了~ 
又犯了个愚蠢的错误
昨天给 Chito 加入了 Trackback 的功能,之后用他给本地的另一片文章发送 Trackback 做测试。
结果每次发送 Trackback 之后都是超时错误,但是 Trackback 又确实成功的发送了过去,比较奇怪
。
折腾了一个晚上,未果……最后到了锻炼的时间,出去活动的时候忽然顿悟,回来打开 lighttpd 的配置文件,果然发现:
"min-procs" => 1,
"max-procs" => 1,
...
囧,只开了一个服务器进程,自己把自己卡住了……
我的一个晚上啊…… ![]()
is-Programmer 升级到 Chito 1.0.7
断断续续折腾了很久,其实主要的工作是把 Chito REST 化了。![]()
更新如下:
核心
- 基于 Rails 2.1。
- REST 化。
- 编辑器升级到 FCKEditor 2.6.3。
功能
- 文章底栏实现,可以在文章下面显示可选内容。
- 文章、评论多选删除。
- 通过编辑器下的 “发布为页面” 按钮,可以将新文章或者已存在的文章发布为页面,也可以将已存在的页面转换为普通文章。
- Blog 评论 RSS 和 留言 RSS, 分别为 /comments.rss 和 /messages.rss。
- 繁体中文语言支持。 ( 仅仅是 iconv 的转换
)
修正
- 保存并继续编辑后显示提示。
- 解决某些 IE 浏览器下无法从文章编辑界面添加分类的问题。
插件 & 皮肤
- 文章底栏: 本地相关文章、全局相关文章。
- iTheme 皮肤。
在 is-Programmer 上测试下,没问题就打包发布了~ ![]()