Monthly Archives: September 2007

acts_as_taggable

这个世界到处都是tag 而且这个世界上好像有两个acts_as_taggable,一个是dhh的plugin版的,一个是gem版的。 比较了半天,发现还是gem版的比较好(http://rubyforge.org/projects/taggable/)。 具体来说 1.gem对于不同的要tag的对象,可以用TagsTable1s格式的表来存tag和对象的关系,比如photo的tag用photos_tags表。 plugin版的则只用一个表taggings,用taggable_type这个字段来表示tag的对象类型。 2.可以为tag关系增加属性。 plugin版的tag关系表只有3个字段(不包括id),要想给这个tag关系加其它属性则比较困难。 gem则容易多了。 gem的tag和被tag对象之间的连接表除了tagid和被tag对象id,还可以有别的属性。 在给对象加tag的时候,可以顺便更新这些属性: # We can do some interesting things with it now   person = Person.new   person.tag "wine beer alcohol", :attributes => { :created_by_id => 1 }   Person.find_tagged_with(:any => ‘wine’,

Posted in Rails

RubyConf 2007 agenda

RubyConf 2007 November 2-4, 2007 Charlotte, North Carolina http://www.rubyconf.org/agenda.html

Posted in Ruby

哪有数据库抱怨sql太复杂的

其实就是一个简单的update语句 UPDATE TAB1 SET COL1 = SUBSTRING(COL1 FROM 1 FOR POSITION( "AAAAAA" IN UPSHIFT(COL1))-1)  || "BBBBBB"||  SUBSTRING(COL1 FROM   POSITION( "AAAAAA" IN UPSHIFT(COL1))  + 7  FOR CHAR_LENGTH(COL1) – POSITION( "AAAAAA" IN UPSHIFT(COL1)) – 7)  WHERE POSITION( "AAAAAA" IN UPSHIFT(COL1)) > 0; 这个语句就是想把一个字段的AAAAAA替换成BBBBBB而已,不过sql/mp没有提供replace之类的函数,只好用这样的土方法了。(如果这个字段有5个AAAAAA,则这个语句要执行5次,呵呵,够土)

Posted in Tech

Rails中使用ESI实现页面cache

什么是ESI ESI的全称是Edge Side Includes,是一个基于XML的标记语言,目的是在HTTP中组装各种资源。是由Oracle和Akamai等公司提议的,在W3C的网站也可以找到相关规格说明,最新的是2001年的了,也不是什么新东西。传统的cache技能基本都已页面为单位进行缓存,问题就是页面部分的动态内容可能比较多,而且是每个客户端的内容都不一样(比如个人的登录信息,欢迎xxx等。),缓存比较困难。ESI为了能把页面的一部分进行缓存,使用基于XML的标记语言,来描述对page内个内容的缓存情况。这样,服务器(缓存部分)就可以只缓存共同部分了。 ESI有点类似SSI,但是它比SSI功能更丰富。 目前支持/实现ESI的开源服务器包括Squid,Mongrel-ESI等,商用的有Oracle和Akamai的服务器。 要在Rails里支持ESI需要安装两个插件,一个是Mongrel用的插件Mongrel-ESI,一个是Rails用来处理ESI标记(tag)的fragmentFu。两个软件都可以在http://mongrel-esi.googlecode.com找到。 如何安装一下Mongrel-ESI我就不说了,因为我也没有装过,下面的代码我都没有试验过。 下面来看一下ESI的代码,下面是一个测试的例子(转自http://blog.tkmr.org/tatsuya/show/368-rails-10-esi,日文) cd /home/my/rails/app/path —-index.html—– <h1>Welcome ESI!!</h1> <p><esi:include src="/welcome/now" max-age="45"/></p> esi标记里的就是ESI的内容了,应该比较好理解,max-age的意思就是页面缓存保留的时间,这里的话每45秒缓存就会被更新一次。 再来看看控制器里的代码: ./script/generate controller welcome now —-welcome_controller.rb—- def now   render :text => "#{Time.now}" end 启动Mongrel_esi: mongrel_esi start   ** Starting Mongrel listening at

Posted in Rails

无觅相关文章插件,快速提升流量