<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ruby 语言 思想驱动生活 &#187; Rails</title>
	<atom:link href="http://liubin.nanshapo.com/category/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://liubin.nanshapo.com</link>
	<description>Ruby,Rails,编程是一种乐趣。</description>
	<lastBuildDate>Thu, 08 Jul 2010 07:42:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>undefined method `^&#8217; for &#8220;6&#8243;:String</title>
		<link>http://liubin.nanshapo.com/2009/11/24/undefined-method-for-6string/</link>
		<comments>http://liubin.nanshapo.com/2009/11/24/undefined-method-for-6string/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 11:04:13 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://liubin.nanshapo.com/?p=217</guid>
		<description><![CDATA[Rails 2.3.4 Ruby 1.9.1 脚手架刚生成都出错。 原来是个BUG： https://rails.lighthouseapp.com/projects/8994/tickets/3144-undefined-method-for-string-ror-234]]></description>
			<content:encoded><![CDATA[<p>Rails 2.3.4<br />
Ruby 1.9.1<br />
脚手架刚生成都出错。<br />
原来是个BUG：<br />
<a href="https://rails.lighthouseapp.com/projects/8994/tickets/3144-undefined-method-for-string-ror-234">https://rails.lighthouseapp.com/projects/8994/tickets/3144-undefined-method-for-string-ror-234</a></p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2009/11/24/undefined-method-for-6string/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LuRuJu 将jude的模型当成Rails的model类使用</title>
		<link>http://liubin.nanshapo.com/2008/03/27/luruju_intro/</link>
		<comments>http://liubin.nanshapo.com/2008/03/27/luruju_intro/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 03:15:52 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
<category>luruju</category><category>rails</category><category>ruby</category>
		<guid isPermaLink="false">http://liubin.nanshapo.com/2008/03/27/luruju_intro/</guid>
		<description><![CDATA[LuRuJu是Lube between Ruby and JUDE的缩写，它的目的就是无缝链接ror程序和jude的模型 特点包括： 1.配置简单，只需要把jude文件放到RAILS_ROOT/app/model下即可。Jude模型会作为mvc的m来被使用。目前实现了类之间的1对1，1对n关联。也支持类之间的继承关系。 2.不需要再维护migrate文件，只需运行 lor:db:create就可以了。表的定义使用jude文件中的定义。 3.可以往model里追加Ruby代码来扩种业务逻辑等 4.和config.cache_classes联动，不需要重启rails就可以修改jude文件并使之有效。 5.即可以用jruby，也可以用cruby 这个软件的作者是野村周平，文档 多是日文，不过看代码应该能看的差不多。 主页是 http://luruju.com/]]></description>
			<content:encoded><![CDATA[<p><a href="http://luruju.com/">LuRuJu</a>是Lube between Ruby and JUDE的缩写，它的目的就是无缝链接ror程序和jude的模型<br />
特点包括：<br />
1.配置简单，只需要把jude文件放到RAILS_ROOT/app/model下即可。Jude模型会作为mvc的m来被使用。目前实现了类之间的1对1，1对n关联。也支持类之间的继承关系。<br />
2.不需要再维护migrate文件，只需运行<br />
lor:db:create就可以了。表的定义使用jude文件中的定义。<br />
3.可以往model里追加Ruby代码来扩种业务逻辑等<br />
4.和config.cache_classes联动，不需要重启rails就可以修改jude文件并使之有效。<br />
5.即可以用jruby，也可以用cruby</p>
<p>这个软件的作者是野村周平，文档 多是日文，不过看代码应该能看的差不多。<br />
主页是 <a href="http://luruju.com/">http://luruju.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2008/03/27/luruju_intro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>acts_as_taggable</title>
		<link>http://liubin.nanshapo.com/2007/09/14/acts_as_taggable/</link>
		<comments>http://liubin.nanshapo.com/2007/09/14/acts_as_taggable/#comments</comments>
		<pubDate>Fri, 14 Sep 2007 11:19:14 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
<category>plugin</category><category>rails</category>
		<guid isPermaLink="false">http://liubin.nanshapo.com/2007/09/14/acts_as_taggable/</guid>
		<description><![CDATA[这个世界到处都是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 &#160; person = Person.new &#160; person.tag&#160;&#34;wine beer alcohol&#34;, :attributes =&#62; { :created_by_id =&#62; 1 } &#160; Person.find_tagged_with(:any =&#62; 'wine', :condition =&#62; &#34;tags_people.created_by_id = 1 AND tags_people.position = 1&#34;) 3.统计功能 tags_count可以统计每个tag被用了多少次 # Gets the top [...]]]></description>
			<content:encoded><![CDATA[<p>这个世界到处都是tag<br />
而且这个世界上好像有两个acts_as_taggable，一个是dhh的plugin版的，一个是gem版的。<br />
比较了半天，发现还是gem版的比较好（<a href="http://rubyforge.org/projects/taggable/">http://rubyforge.org/projects/taggable/</a>）。<br />
具体来说<br />
1.gem对于不同的要tag的对象，可以用TagsTable1s格式的表来存tag和对象的关系，比如photo的tag用photos_tags表。<br />
plugin版的则只用一个表taggings，用taggable_type这个字段来表示tag的对象类型。<br />
2.可以为tag关系增加属性。<br />
plugin版的tag关系表只有3个字段（不包括id），要想给这个tag关系加其它属性则比较困难。<br />
gem则容易多了。<br />
gem的tag和被tag对象之间的连接表除了tagid和被tag对象id，还可以有别的属性。<br />
在给对象加tag的时候，可以顺便更新这些属性：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;"># We can do some interesting things with it now</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">person</span><span style="color: Gray;"> = </span><span style="color: Blue;">Person</span><span style="color: Gray;">.</span><span style="color: Blue;">new</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">person</span><span style="color: Gray;">.</span><span style="color: Blue;">tag</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">wine beer alcohol</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, :</span><span style="color: Blue;">attributes</span><span style="color: Gray;"> =&gt; { :</span><span style="color: Blue;">created_by_id</span><span style="color: Gray;"> =&gt; </span><span style="color: Maroon;">1</span><span style="color: Gray;"> }</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">Person</span><span style="color: Gray;">.</span><span style="color: Blue;">find_tagged_with</span><span style="color: Olive;">(</span><span style="color: Gray;">:</span><span style="color: Blue;">any</span><span style="color: Gray;"> =&gt; </span><span style="color: #8b0000;">'</span><span style="color: Red;">wine</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, :</span><span style="color: Blue;">condition</span><span style="color: Gray;"> =&gt; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">tags_people.created_by_id = 1 AND tags_people.position = 1</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li></ol></div>
<p>3.统计功能<br />
tags_count可以统计每个tag被用了多少次</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;"># Gets the top 10 tags for all photos</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">Photo</span><span style="color: Gray;">.</span><span style="color: Blue;">tags_count</span><span style="color: Gray;"> :</span><span style="color: Blue;">limit</span><span style="color: Gray;"> =&gt; </span><span style="color: Maroon;">10</span><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;"># =&gt; { 'beer' =&gt; 68, 'wine' =&gt; 37, 'vodka' =&gt; '22', ... }</span></li></ol></div>
<p>4.性能可能gem的好一点<br />
plugin版的好像是在给一个对象加tag的时候，会吧这个对象的tag先删掉，再全部加上，性能上有点浪费。</p>
<p>5.容易修改<br />
gem版的写的比较简单，很容以自己进行扩展。<br />
6.gem版的自带一个cloud，可以根据tag的不同显示不同大小的文字。</p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2007/09/14/acts_as_taggable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails中使用ESI实现页面cache</title>
		<link>http://liubin.nanshapo.com/2007/09/03/cache_with_esi/</link>
		<comments>http://liubin.nanshapo.com/2007/09/03/cache_with_esi/#comments</comments>
		<pubDate>Mon, 03 Sep 2007 09:56:41 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
<category>cache</category><category>rails</category>
		<guid isPermaLink="false">http://liubin.nanshapo.com/2007/09/03/cache_with_esi/</guid>
		<description><![CDATA[什么是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----- &#60;h1&#62;Welcome ESI!!&#60;/h1&#62; &#60;p&#62;&#60;esi:include&#160;src=&#34;/welcome/now&#34; max-age=&#34;45&#34;/&#62;&#60;/p&#62; esi标记里的就是ESI的内容了，应该比较好理解，max-age的意思就是页面缓存保留的时间，这里的话每45秒缓存就会被更新一次。 再来看看控制器里的代码： ./script/generate controller welcome now ----welcome_controller.rb---- def now &#160; render :text =&#62; &#34;#{Time.now}&#34; end 启动Mongrel_esi： mongrel_esi start &#160; ** Starting Mongrel listening at 0.0.0.0:2000 然后就可以去浏览器里看看了，是不是45秒那个显示的时间才更新一次。 上面的例子是标准的ESI写法，当然Rails中这样写就有点累了，这个时候就需要fragmentFu这个Rails的plugin了。 在ERB里，写法是这样的： ./script/plugin install http://mongrel-esi.googlecode.com/svn/trunk/plugin/fragment_fu ----/app/view/welcome/index.html.erb---- &#60;h1&#62;Welcome ESI!!&#60;/h1&#62; &#60;p&#62;&#60;%= render&#160;:esi =&#62; {:action =&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>什么是ESI<br />
ESI的全称是Edge Side Includes，是一个基于XML的标记语言，目的是在HTTP中组装各种资源。是由Oracle和Akamai等公司提议的，在W3C的网站也可以找到相关规格说明，最新的是2001年的了，也不是什么新东西。传统的cache技能基本都已页面为单位进行缓存，问题就是页面部分的动态内容可能比较多，而且是每个客户端的内容都不一样（比如个人的登录信息，欢迎xxx等。），缓存比较困难。ESI为了能把页面的一部分进行缓存，使用基于XML的标记语言，来描述对page内个内容的缓存情况。这样，服务器（缓存部分）就可以只缓存共同部分了。<br />
ESI有点类似SSI，但是它比SSI功能更丰富。<br />
目前支持/实现ESI的开源服务器包括Squid,Mongrel-ESI等，商用的有Oracle和Akamai的服务器。</p>
<p>要在Rails里支持ESI需要安装两个插件，一个是Mongrel用的插件Mongrel-ESI，一个是Rails用来处理ESI标记（tag）的fragmentFu。两个软件都可以在http://mongrel-esi.googlecode.com找到。<br />
如何安装一下Mongrel-ESI我就不说了，因为我也没有装过，下面的代码我都没有试验过。<br />
下面来看一下ESI的代码，下面是一个测试的例子（转自<a href="http://blog.tkmr.org/tatsuya/show/368-rails-10-esi" target="_blank">http://blog.tkmr.org/tatsuya/show/368-rails-10-esi，日文</a>）</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">cd /home/my/rails/app/path</span></li>
<li><span style="color: Gray;">----index.html-----</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">h1</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Welcome ESI!!</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">h1</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">esi:include</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">/welcome/now</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">max-age</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">45</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;&lt;/</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>esi标记里的就是ESI的内容了，应该比较好理解，max-age的意思就是页面缓存保留的时间，这里的话每45秒缓存就会被更新一次。</p>
<p>再来看看控制器里的代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">./script/generate controller welcome now</span></li>
<li><span style="color: Gray;">----welcome_controller.rb----</span></li>
<li><span style="color: Gray;">def now</span></li>
<li><span style="color: Gray;">&nbsp; render :text =&gt; &quot;#{Time.now}&quot;</span></li>
<li><span style="color: Gray;">end</span></li></ol></div>
<p>启动Mongrel_esi：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">mongrel_esi start</span></li>
<li><span style="color: Gray;">&nbsp; ** Starting Mongrel listening at 0.0.0.0:2000</span></li></ol></div>
<p>然后就可以去浏览器里看看了，是不是45秒那个显示的时间才更新一次。</p>
<p>上面的例子是标准的ESI写法，当然Rails中这样写就有点累了，这个时候就需要fragmentFu这个Rails的plugin了。</p>
<p>在ERB里，写法是这样的：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">./script/plugin install http://mongrel-esi.googlecode.com/svn/trunk/plugin/fragment_fu</span></li>
<li><span style="color: Gray;">----/app/view/welcome/index.html.erb----</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">h1</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Welcome ESI!!</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">h1</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Gray;">%= </span><span style="color: #00008b;">render</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">:esi</span><span style="color: Gray;"> =</span><span style="color: Olive;">&gt;</span><span style="color: Gray;"> {:action =&gt; &quot;now&quot;}, :ttl =&gt; 45.seconds %&gt; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>ttl这个名字比较亲切。</p>
<p>当然，ESI里面也能使用Cookie或者Http的request数据：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">#query string</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Gray;">%= </span><span style="color: #00008b;">render</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">:esi</span><span style="color: Gray;"> =</span><span style="color: Olive;">&gt;</span><span style="color: Gray;"> &quot;/users/name/$(QUERY_STRING{my_name})&quot; %&gt; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">#Cookie</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Gray;">%= </span><span style="color: #00008b;">render</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">:esi</span><span style="color: Gray;"> =</span><span style="color: Olive;">&gt;</span><span style="color: Gray;"> &quot;/users/home/$(HTTP_COOKIE{UserID})&quot; %&gt; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>除此之外，ESI还有异常处理机能。因为ESI指令的include可以指向别的地址，所以，取得cache内容也可能失败。</p>
<p>比如下面的代码（来自http://revolutiononrails.blogspot.com/2007/08/advanced-rails-caching-on-edge.html<br />
）</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">esi:try</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">esi:attempt</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">esi:include</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">/latest</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">max-age</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">5</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">timeout</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">esi:attempt</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">esi:except</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">esi:include</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://static.foo.com/latest</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">max-age</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">5</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">timeout</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">esi:except</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">esi:try</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>这个也应该比较好理解，如果尝试1秒内取得不到/latest的话，cache服务器就会放弃，而去取静态页面的内容。</p>
<p>另一不错的功能就是Invalidation，就是使已有的cache的内容失效，因为它cache的内容已经被更新过了。在Rails自带的cache功能里需要在action调用失效方法的，或者用sweeper回调。ESI则有invalidate指令：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">esi:invalidate</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;?</span><span style="color: Green;">xml</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">version</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1.0</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">?&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Gray;">!</span><span style="color: #00008b;">DOCTYPE</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">INVALIDATION</span><span style="color: Gray;"> </span><span style="color: #00008b;">SYSTEM</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">internal:///WCSinvalidation.dtd</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">INVALIDATION</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">VERSION</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">WCS-1.1</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">OBJECT</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">BASICSELECTOR</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">URI</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">/foo/bar/baz</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">ACTION</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">REMOVALTTL</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">0</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">OBJECT</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">INVALIDATION</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">esi:invalidate</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>参考链接：</p>
<p><a href="http://revolutiononrails.blogspot.com/2007/08/fragmentfu-fun-with-fragments.html" target="_blank">http://revolutiononrails.blogspot.com/2007/08/fragmentfu-fun-with-fragments.html</a><br />
<a href="http://revolutiononrails.blogspot.com/2007/08/advanced-rails-caching-on-edge.html" target="_blank">http://revolutiononrails.blogspot.com/2007/08/advanced-rails-caching-on-edge.html</a><br />
<a href="http://www.w3.org/TR/esi-lang" target="_blank">http://www.w3.org/TR/esi-lang</a><br />
<a href="http://blog.tkmr.org/tatsuya/show/368-rails-10-esi" target="_blank">http://blog.tkmr.org/tatsuya/show/368-rails-10-esi</a></p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2007/09/03/cache_with_esi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>这段话有问题吗？</title>
		<link>http://liubin.nanshapo.com/2007/08/24/a_question_about_rest/</link>
		<comments>http://liubin.nanshapo.com/2007/08/24/a_question_about_rest/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 07:39:21 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[技术]]></category>
<category>rails</category><category>REST</category>
		<guid isPermaLink="false">http://liubin.nanshapo.com/2007/08/24/a_question_about_rest/</guid>
		<description><![CDATA[在看Ralf Wirdemann 和Thomas Baustert的《RESTful Rails Development》，1.2节的why REST的时候说道： Clean URLs. REST URLs represent resources and not actions. URLs always have the same format: first comes the controller and then the id of the referenced esource. The requested manipulation is independent of the URL and is expressed with the help of HTTP verbs. 说REST有着清楚简洁的URL风格，URL里不表示（带）action，是controller/:id这样形式的，至于对这个资源进行何种操作，是通过http header里的动词来指定的。 我是对这句话很有疑问，http header [...]]]></description>
			<content:encoded><![CDATA[<p>在看Ralf Wirdemann 和Thomas Baustert的《RESTful Rails Development》，1.2节的why REST的时候说道：<br />
Clean URLs. REST URLs represent resources and not actions. URLs always have the<br />
same format: first comes the controller and then the id of the referenced esource.<br />
The requested manipulation is independent of the URL and is expressed with the help of HTTP verbs.</p>
<p>说REST有着清楚简洁的URL风格，URL里不表示（带）action，是controller/:id这样形式的，至于对这个资源进行何种操作，是通过http header里的动词来指定的。<br />
我是对这句话很有疑问，http header 里就4中操作，如果处理CRUD以外的action的话，怎么办？<br />
Map.resources 的时候可以指定collection或者member的action，就是说url里还是会出现action的，比如users;top10，可以列出排名前十的用户，这个top10就是collection指定的users控制器的一个action。<br />
这句话说的即使不错，也是不严谨的。对于刚接触REST这个词的人来说，很容易误解，误入歧途。</p>
<p>我觉得，<strong>不是说/projects/1就比/projects/show/1更RESTful</strong>了。<br />
本来，URL就是RESTful的东西。</p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2007/08/24/a_question_about_rest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REST有什么好的</title>
		<link>http://liubin.nanshapo.com/2007/08/11/is_rest_better/</link>
		<comments>http://liubin.nanshapo.com/2007/08/11/is_rest_better/#comments</comments>
		<pubDate>Sat, 11 Aug 2007 00:00:51 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
<category>rails</category><category>REST</category>
		<guid isPermaLink="false">http://liubin.nanshapo.com/2007/08/11/is_rest_better/</guid>
		<description><![CDATA[REST(Representational State Transfer )在Rails里已经被支持了，但是始终搞不清它到底好在哪里。以下均为个人理解，如果不对的地方请指正。 REST以资源为中心，在典型的oltp系统里这个资源就是一个数据库记录，分析层上是一个业务对象。 rest把资源放到URL里，而对资源的CRUD操作则放在http的header里。（因为现在的浏览器还只支持get和post，而delete和put则需要格外处理，rails里是用了input hidden控件） 对于对象的操作，不像以往那样表现在URL上，比如/blog/delete/1表示删除id为1的blog项目，在rest里，只需要/blog/1至于是删除，还是更新，在URL里是看不出来的（这样会不会有问题？比如用户从URL看以为当前是show，F5刷新了一下，结果实际上是delete）。 REST真的把URL变得简单了？如果只是长度小了的话可以算是。也许REST的好处就是使得URL的数量变小。 当然，以上看法只是对使用浏览器来操作web应用的场合，至于web service的话，不需要用户了解多少url等内容，也许会确实变得简单。 这里有一个简单的介绍教程，REST的]]></description>
			<content:encoded><![CDATA[<p>REST(Representational State Transfer )在Rails里已经被支持了，但是始终搞不清它到底好在哪里。以下均为个人理解，如果不对的地方请指正。<br />
REST以资源为中心，在典型的oltp系统里这个资源就是一个数据库记录，分析层上是一个业务对象。<br />
rest把资源放到URL里，而对资源的CRUD操作则放在http的header里。（因为现在的浏览器还只支持get和post，而delete和put则需要格外处理，rails里是用了input hidden控件）<br />
对于对象的操作，不像以往那样表现在URL上，比如/blog/delete/1表示删除id为1的blog项目，在rest里，只需要/blog/1至于是删除，还是更新，在URL里是看不出来的（这样会不会有问题？比如用户从URL看以为当前是show，F5刷新了一下，结果实际上是delete）。<br />
REST真的把URL变得简单了？如果只是长度小了的话可以算是。也许REST的好处就是使得URL的数量变小。</p>
<p>当然，以上看法只是对使用浏览器来操作web应用的场合，至于web service的话，不需要用户了解多少url等内容，也许会确实变得简单。<br />
<a href="http://www.xfront.com/REST-Web-Services.html" target="_blank">这里有一个简单的介绍教程，REST的</a></p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2007/08/11/is_rest_better/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DRECOM Award on Rails 2007</title>
		<link>http://liubin.nanshapo.com/2007/06/13/drecom-award-on-rails-2007/</link>
		<comments>http://liubin.nanshapo.com/2007/06/13/drecom-award-on-rails-2007/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 12:52:59 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
<category>rails</category>
		<guid isPermaLink="false">http://liubin.nanshapo.com/2007/06/13/drecom-award-on-rails-2007/</guid>
		<description><![CDATA[Drecom 公司为了在软件工程师中推广Rails，从2006年就举行了DRECOM Award on Rails。 今年是第二年了，最高奖100万日元，合8300美元左右，合人民币6万多，如果人民币再升值，就快不到6万了。 报名时间为6月2号到9月25号。 国内的团队不知道有没有想要试试看的。 具体信息可见http://rails.drecom.jp/english_top]]></description>
			<content:encoded><![CDATA[<p>Drecom 公司为了在软件工程师中推广Rails，从2006年就举行了DRECOM Award on Rails。<br />
今年是第二年了，最高奖100万日元，合8300美元左右，合人民币6万多，如果人民币再升值，就快不到6万了。<br />
报名时间为6月2号到9月25号。<br />
国内的团队不知道有没有想要试试看的。<br />
具体信息可见<a href="http://rails.drecom.jp/english_top" target="_blank">http://rails.drecom.jp/english_top</a></p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2007/06/13/drecom-award-on-rails-2007/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>听Dave Thomas演讲</title>
		<link>http://liubin.nanshapo.com/2007/06/10/%e5%90%acdave-thomas%e6%bc%94%e8%ae%b2%ef%bc%9adave%e5%b7%b2%e7%bb%8f%e5%91%8a%e5%88%ab%e4%ba%86rails/</link>
		<comments>http://liubin.nanshapo.com/2007/06/10/%e5%90%acdave-thomas%e6%bc%94%e8%ae%b2%ef%bc%9adave%e5%b7%b2%e7%bb%8f%e5%91%8a%e5%88%ab%e4%ba%86rails/#comments</comments>
		<pubDate>Sun, 10 Jun 2007 13:08:01 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
<category>rails</category><category>ruby</category><category>RubyKaigi2007</category>
		<guid isPermaLink="false">http://liubin.nanshapo.com/archives/91</guid>
		<description><![CDATA[在台上是没穿鞋子演讲的，比想像的胖一点，尤其是肚子，呵呵。：-） Dave像爱自己的孩子一样爱着Ruby。 而且和他的孩子一样，Ruby也被说为进入了思春期（青春期）。 交友关系也变了，而且还开始和别人约会，包括： IronRuby，JRuby，Rubinius，Gaden&#8217;s Point 等。 另外还讲了些关于Ruby的危机： 1.对社区的破坏。 2.大公司的分割。（Ruby不是sun的Ruby，也不是微软的Ruby） 3.不同的意见的冲突（好的，坏的，如何区分） 4.爆发性的增长。（预计近2，3年之内） 最重要的QA Q.很早就使用Ruby的人抱怨Rails太复杂了。Dave怎么看？ A.这是个很好的问题，因为自己在Rails社区里的感受不太好，3个星期之前已经脱离Rails社区了，以后主要集中于Pure Ruby。 Ruby社区还没有变划（变质？）。Rails成长的太快，real busy ，没时间让它变得nice，3周前还说[we want rails to be nice]，2天后180度的变了。 不过，还想给Rails一个机会。 （上面可能说的有点不完整） 关于Dave是否脱离Rails，我也不敢肯定，但是那天确实说了感到Unhappy，想集中于Pure Ruby。 再说他们公司还要搞Rails培训和出书呢。 可以看这里，记得比较详细，英文不少。 http://jp.rubyist.net/RubyKaigi2007/Log0610-S5.html]]></description>
			<content:encoded><![CDATA[<p>在台上是没穿鞋子演讲的，比想像的胖一点，尤其是肚子，呵呵。：-）</p>
<p>Dave像爱自己的孩子一样爱着Ruby。<br />
而且和他的孩子一样，Ruby也被说为进入了思春期（青春期）。<br />
交友关系也变了，而且还开始和别人约会，包括：<br />
IronRuby，JRuby，Rubinius，Gaden&#8217;s Point 等。</p>
<p>另外还讲了些关于Ruby的危机：<br />
1.对社区的破坏。<br />
2.大公司的分割。（Ruby不是sun的Ruby，也不是微软的Ruby）<br />
3.不同的意见的冲突（好的，坏的，如何区分）<br />
4.爆发性的增长。（预计近2，3年之内）</p>
<p>最重要的QA<br />
Q.很早就使用Ruby的人抱怨Rails太复杂了。Dave怎么看？<br />
A.这是个很好的问题，因为自己在Rails社区里的感受不太好<del datetime="2007-06-15T10:53:42+00:00">，3个星期之前已经脱离Rails社区了，以后主要集中于Pure Ruby。<br />
Ruby社区还没有变划（变质？）。Rails成长的太快，real busy ，没时间让它变得nice，3周前还说[we want rails to be nice]，2天后180度的变了。<br />
不过，还想给Rails一个机会。<br />
（上面可能说的有点不完整）</del></p>
<p>关于Dave是否脱离Rails，我也不敢肯定，但是那天确实说了感到Unhappy，想集中于Pure Ruby。<br />
再说他们公司还要搞Rails培训和出书呢。</p>
<p>可以看这里，记得比较详细，英文不少。<br />
<a href="http://jp.rubyist.net/RubyKaigi2007/Log0610-S5.html" target="_blank">http://jp.rubyist.net/RubyKaigi2007/Log0610-S5.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2007/06/10/%e5%90%acdave-thomas%e6%bc%94%e8%ae%b2%ef%bc%9adave%e5%b7%b2%e7%bb%8f%e5%91%8a%e5%88%ab%e4%ba%86rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Japan Ruby Conf 2007 第一天(前半)</title>
		<link>http://liubin.nanshapo.com/2007/06/09/japan-ruby-conf-2007-%e7%ac%ac%e4%b8%80%e5%a4%a9/</link>
		<comments>http://liubin.nanshapo.com/2007/06/09/japan-ruby-conf-2007-%e7%ac%ac%e4%b8%80%e5%a4%a9/#comments</comments>
		<pubDate>Sat, 09 Jun 2007 12:35:05 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
<category>concurrency</category><category>fiber</category><category>matz</category><category>rails</category><category>ruby</category><category>RubyKaigi2007</category>
		<guid isPermaLink="false">http://liubin.nanshapo.com/2007/06/09/japan-ruby-conf-2007-%e7%ac%ac%e4%b8%80%e5%a4%a9/</guid>
		<description><![CDATA[日本名字叫日本Ruby会议，总感觉这个名字有点怪。 地点秋叶原旁边，新御茶的水，人数400以上，女性10人以上。据说今年的RailsConf的1400人中没有女的参加（？真的）。 其中使用Rails工作的大概1/3。 使用MacBook的有近一半。 早上提前20分钟就到了，9：30进场，10点开始。开始的时候matz还没到。 每个座位上都放了一个手提袋，里面有一些赞助公司的小礼物，宣传小册子等。Sun的是一块糖。 第一个是sasada，yarv的作者，现在还是东大的大学院生（中国的研究生） 比较简单介绍了一下，技术细节没讲太多，涉及到的有concurrency,fiber等。 另外澄清了一个谣言，就是去年有人说他要去的公司是sun。 第二个安定版ruby的现状和将来。演讲者的名字Googlepinyin还打不出来 主要说了1.8.5和1.8.6的现状，主要是bug修正等 估计到了1.8.7和1.8.8之后就不会再继续开发了。 第三个出场的是青木郎峰，写了不少书，包括RHG，Haskell 编程 主要是manual刷新计划。 第一第二阶段已经完了， 本来预计今年8.31第三阶段完成的，但是目前这个最后阶段进度只有2%，照这个速度，要到2050年才能完成。 第四个 今天见到Charles Nutter 和 Thomas Enebo了。他么确认了jruby1.0 release了 。现场一片掌声。 他们两个还演示了一下2个例子 1.jruby jirb，jruby的irb，具备了自动完成功能，就是linux下的输入一部分命令然后按tab键的自动完成。 演示了在ruby中使用swing的frame，button和awt的actionlistener 还有演示了java的thread的例子。 2.jruby on rails 一个使用jdbc的web例子。 而且能打包成war文件，放在j2ee服务器上（这点比较强）。 上午结束。 下午1点开始是matz的主题演讲，当时真想上去握握手。 主题是2007年的Ruby和将来 Ruby开始，1993，2。 1.9.1 2007的圣诞节。 2.0，不好说，估计真的要 然后是企业对Ruby支持，包括sun（JRuby），ms（IronRuby），Thoughworks（24小时技术支持，雇佣xruby的中国人开发者） 据说twitter的负荷达到11000 req/sec 剩下的有时间再写。]]></description>
			<content:encoded><![CDATA[<p>日本名字叫日本Ruby会议，总感觉这个名字有点怪。<br />
地点秋叶原旁边，新御茶的水，人数400以上，女性10人以上。据说今年的RailsConf的1400人中没有女的参加（？真的）。<br />
其中使用Rails工作的大概1/3。<br />
使用MacBook的有近一半。</p>
<p>早上提前20分钟就到了，9：30进场，10点开始。开始的时候matz还没到。<br />
每个座位上都放了一个手提袋，里面有一些赞助公司的小礼物，宣传小册子等。Sun的是一块糖。</p>
<p>第一个是sasada，yarv的作者，现在还是东大的大学院生（中国的研究生）<br />
比较简单介绍了一下，技术细节没讲太多，涉及到的有concurrency,fiber等。<br />
另外澄清了一个谣言，就是去年有人说他要去的公司是sun。</p>
<p>第二个安定版ruby的现状和将来。演讲者的名字Googlepinyin还打不出来<br />
主要说了1.8.5和1.8.6的现状，主要是bug修正等<br />
估计到了1.8.7和1.8.8之后就不会再继续开发了。</p>
<p>第三个出场的是青木郎峰，写了不少书，包括RHG，Haskell 编程<br />
主要是manual刷新计划。<br />
第一第二阶段已经完了，<br />
本来预计今年8.31第三阶段完成的，但是目前这个最后阶段进度只有2%，照这个速度，要到2050年才能完成。</p>
<p>第四个<br />
今天见到Charles Nutter 和 Thomas Enebo了。他么确认了jruby1.0 release了 。现场一片掌声。<br />
他们两个还演示了一下2个例子</p>
<p>1.jruby<br />
jirb，jruby的irb，具备了自动完成功能，就是linux下的输入一部分命令然后按tab键的自动完成。<br />
演示了在ruby中使用swing的frame，button和awt的actionlistener<br />
还有演示了java的thread的例子。</p>
<p>2.jruby on rails<br />
一个使用jdbc的web例子。<br />
而且能打包成war文件，放在j2ee服务器上（这点比较强）。</p>
<p>上午结束。</p>
<p>下午1点开始是matz的主题演讲，当时真想上去握握手。<br />
主题是2007年的Ruby和将来<br />
Ruby开始，1993，2。<br />
1.9.1 2007的圣诞节。<br />
2.0，不好说，估计真的要<br />
然后是企业对Ruby支持，包括sun（JRuby），ms（IronRuby），Thoughworks（24小时技术支持，雇佣xruby的中国人开发者）<br />
据说twitter的负荷达到11000 req/sec</p>
<p>剩下的有时间再写。</p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2007/06/09/japan-ruby-conf-2007-%e7%ac%ac%e4%b8%80%e5%a4%a9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在DreamHost上部署Rails程序</title>
		<link>http://liubin.nanshapo.com/2007/06/07/%e5%9c%a8dreamhost%e4%b8%8a%e9%83%a8%e7%bd%b2rails%e7%a8%8b%e5%ba%8f/</link>
		<comments>http://liubin.nanshapo.com/2007/06/07/%e5%9c%a8dreamhost%e4%b8%8a%e9%83%a8%e7%bd%b2rails%e7%a8%8b%e5%ba%8f/#comments</comments>
		<pubDate>Thu, 07 Jun 2007 15:05:33 +0000</pubDate>
		<dc:creator>liubin</dc:creator>
				<category><![CDATA[Rails]]></category>
<category>dreamhost</category><category>rails</category>
		<guid isPermaLink="false">http://liubin.nanshapo.com/2007/06/07/%e5%9c%a8dreamhost%e4%b8%8a%e9%83%a8%e7%bd%b2rails%e7%a8%8b%e5%ba%8f/</guid>
		<description><![CDATA[子域名labs.nanshapo.com，用ssh登录到系统。 [rollo]$ pwd /home/liubin/labs.nanshapo.com [rollo]$ rails front /usr/bin/rails:17:Warning: require_gem is obsolete. Use gem instead. create create app/controllers create app/helpers ..................... create log/server.log create log/production.log create log/development.log create log/test.log [rollo]$ [rollo]$ cp front/public/.htaccess ./ [rollo]$ vi .htaccess 对.htaccess只有两个小小的修正: RewriteRule ^(.*)$ front/public/dispatch.fcgi [QSA,L] 即将cgi改为fcgi，同时加入路径front/public/等。 创建一个控制器和2个简单的action [rollo]$ ruby script/generate controller Main index test exists app/controllers/ exists app/helpers/ create [...]]]></description>
			<content:encoded><![CDATA[<p>子域名<a href="http://labs.nanshapo.com/">labs.nanshapo.com</a>，用ssh登录到系统。<br />
<code><br />
[rollo]$ pwd<br />
/home/liubin/labs.nanshapo.com<br />
[rollo]$ rails front<br />
/usr/bin/rails:17:Warning: require_gem is obsolete.  Use gem instead.<br />
      create<br />
      create  app/controllers<br />
      create  app/helpers<br />
      .....................<br />
      create  log/server.log<br />
      create  log/production.log<br />
      create  log/development.log<br />
      create  log/test.log<br />
[rollo]$<br />
[rollo]$ cp front/public/.htaccess ./<br />
[rollo]$ vi .htaccess</code><br />
对.htaccess只有两个小小的修正:<br />
<code>RewriteRule ^(.*)$ front/public/dispatch.fcgi [QSA,L]</code><br />
即将cgi改为fcgi，同时加入路径front/public/等。</p>
<p>创建一个控制器和2个简单的action<br />
<code><br />
[rollo]$ ruby script/generate controller Main index test<br />
      exists  app/controllers/<br />
      exists  app/helpers/<br />
      create  app/views/main<br />
      exists  test/functional/<br />
      create  app/controllers/main_controller.rb<br />
      create  test/functional/main_controller_test.rb<br />
      create  app/helpers/main_helper.rb<br />
      create  app/views/main/index.rhtml<br />
      create  app/views/main/test.rhtml<br />
[rollo]$</code></p>
<p>修改router<br />
<code><br />
[rollo]$ vi config/routes.rb</code><br />
在适当的地方加入（或者将那个注释掉的改一下）<br />
<code>map.connect '',:controller=>"main"</code></p>
<p>这时候看了一下<a href="http://labs.nanshapo.com/">http://labs.nanshapo.com/</a><br />
显示如下<br />
<code>Main#index<br />
Find me in app/views/main/index.rhtml</code></p>
<p>再看看test action</p>
<p>http://labs.nanshapo.com/Main/test</p>
<p>显示<br />
<code>Main#test<br />
Find me in app/views/main/test.rhtml</code></p>
<p>修改一下程序</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">MainController</span><span style="color: Gray;"> &lt; </span><span style="color: Blue;">ApplicationController</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">def</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">index</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #00008b;">@cip</span><span style="color: Gray;"> = </span><span style="color: Blue;">request</span><span style="color: Gray;">.</span><span style="color: Blue;">remote_ip</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">end</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">def</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">test</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #00008b;">@refer</span><span style="color: Gray;"> = </span><span style="color: Blue;">headers</span><span style="color: Olive;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Referer</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">]</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">end</span></li>
<li><span style="color: Green;">end</span></li></ol></div>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">#index.rhtml</li>
<li>hello &lt;%=@cip%&gt;</li>
<li>&lt;br&gt;</li>
<li>&lt;%=url_for :action=&gt;&quot;test&quot;%&gt;</li>
<li>&lt;br&gt;</li>
<li>&lt;%= link_to &quot;Go to test&quot;, :action =&gt; &quot;test&quot; %&gt;</li></ol></div>
<p>不过link_to和url_for产生的url都是/front/public/main/test 。明天看看怎么改吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://liubin.nanshapo.com/2007/06/07/%e5%9c%a8dreamhost%e4%b8%8a%e9%83%a8%e7%bd%b2rails%e7%a8%8b%e5%ba%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
