Archive for March, 2007

render partial

Friday, March 30th, 2007

在 rails scale 的过程中建议 render_partial 改为 render :partial => “xxxxx” 的形式,render_action 也同样,render_xxx 的形式都是调用了相应的 helper 方法。在看看 render partial 是怎么用的:

render :partial => ‘partial_name’, : object => @instance_variable

会将 @instance_variable 传入 partial 页面,如果实例变量刚好和 partial 页面同名可以省略为

render :partial => ‘partial_name”

如果还需要传递其他参数,可以加 locals:

render :partial => ‘partial_name’, :locals => { :variable => @xxx }

此外如果传入一个collection,还可以自动的遍历;还可以在每个 partial 之间加入分割用的 partial:

render :partial => ‘partial_name’, :collection => @instance_variable, :spacer_template => ‘partial_divider’

我现在的问题时:

默认传入一个实例变量的方法 render :partial => ‘xxxx’ 和用 locals 传入变量的方式 render :partial => ‘xxx’, :locals => {…} 哪个效率更高一些,从代码上将第一个更爽一些。从效率上讲不知道我是不是可以理解为第一种方法要创建实例变量(instance variable),第二种方法要建立符号(Symbol)

知道的麻烦给解释一下 ;)

join Folding@Home team

Thursday, March 29th, 2007

I changed my mac’s screensaver into Folding@Home, and join the V2EX team.

waiting my first work unit :)

technorati tags:,

Blogged with Flock

rails中的session存储问题

Thursday, March 29th, 2007

Add-ons 的功能基本开发完成,已经进入 beta 测试阶段,之前 session 一直用 FileStore 存储,部署到 production server 之后这样似乎不太靠谱,于是转用 ActiveRecordStore ,这样一方面提高效率,之前的 session 全部以文件形式存储查找慢,用数据建立索引可以加速。另一方面多 server 做 load balance 之后每次请求都可能会在不同的 server 上跳,会出现找不到 session 的情况。这样全部使用统一的 DB 做存储,各个请求之间不共享任何东西,我们也就不用在 web 层和应用层维护任何状态,状态的维护工作被我们放在了一个特定的整合点上,这个叫无共享架构(share-nothing architecture)

Yahoo 这样用 PHP,LiveJournal 这样用 Perl,我们这样用 ROR~ 上面提到的整合点最简单的应该是 ActiveRecordStore,此外还可以用DRbMemcached

使用 ActiveRecordStore 存储 session 第一步建一张存 session 的表,如果你用了 migration,直接rake db:sessions:create 就可以了,自己见表的话用以下 sql

create table sessions (
id int(11) not null auto_increment,
sessid varchar(255),
data text,
updated_at datetime default null,
primary key(id),
index session_index (sessid)
);

然后编辑 config/environment.rb 或者 config/environments/production.rb:

config.action_controller.session_store = :active_record_store

一共两步,搞定 ^-^ 重启 server,访问一下,查查数据库,有了!(Whisper 说 mysql 有内存表,会更快)

删除以前的那些文件 session,这个东西可以删除12小时前的session:

find tmp/sessions -name ‘ruby_sess*’ -ctime +12h -delete

数据库 session 表的删法还要在研究一下 TOT

[Update] 定时删除 session 有一个扩展 ActiveRecord::Session 的方法我没搞出来,后来干脆直接在 crontab 里加了一个任务,执行删除 session 的一个脚本

#!/bin/sh
mysql database_name -uuser_name -ppassword << eof
delete from sessions where date_sub(now(), interval 6 hour) > updated_at and bit_length(data) <= 688;
eof

exit 0;

Reference:
cron, man cron, man 5 crontab
Agile web development with Rails
Rails Wiki

Mongrel cluster + pound

Wednesday, March 28th, 2007

Installing and Configuring Mongrel_Cluster and Pound on OS X

Mongrel cluster 在后端为 rails 服务,前端由 Pound 做负载均衡,决定将 request 发到哪一个 mongrel 上。

要注意的是 session 一定要存在 DB 中,不然会出现找不到 session 的问题。

Mongrel cluster

Pound

appscript rb

Wednesday, March 28th, 2007

一个用 ruby 操作 applescript 的东西,可以去 rubyforge 上看看,在 Mac Dev 上面有篇教程可以看看,现在还只是 0.3.0

technorati tags:, ,

Blogged with Flock

好牛的iPhone

Friday, March 23rd, 2007

technorati tags:

Blogged with Flock