<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>lihbobo</title>
    <description></description>
    <link>http://lihbobo.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>Ruby on rails 开发中常用到的一些方法</title>
        <author>lihbobo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lihbobo.javaeye.com">lihbobo</a>&nbsp;
                    链接：<a href="http://lihbobo.javaeye.com/blog/205783" style="color:red;">http://lihbobo.javaeye.com/blog/205783</a>&nbsp;
          发表时间: 2008年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ActiveViews:<br />1.link_to(image_tag()):<br />&lt;%= link_to(image_tag('logo.png', :class=>'png left'), home_path) %><br />Html 解析：&lt;a href="/">&lt;img alt="Logo" class="png left" src="http://try.lovdbyless.com/images/logo.png?1202945226" />&lt;/a><br />2.导入Javscript 文件：<br />&lt;%= javascript_include_tag :defaults, 'jquery', 'thickbox', 'truncator', :cache=>true %><br />Html: &lt;script src="http://try.lovdbyless.com/javascripts/all.js?1205716637" type="text/javascript">&lt;/script><br />3.导入Css文件：<br />&lt;%= stylesheet_link_tag 'reset', 'ie', 'application', :cache=>true %><br />html: &lt;link href="http://try.lovdbyless.com/stylesheets/all.css?1205716637" media="screen" rel="stylesheet" type="text/css" /><br />4.一个Issue：<br />&lt;%= yield :head%><br />例子：def fibUpTo(max)<br />&nbsp; i1, i2 = 1, 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # parallel assignment<br />&nbsp; while i1 &lt;= max<br />&nbsp;&nbsp;&nbsp; yield i1<br />&nbsp;&nbsp;&nbsp; i1, i2 = i2, i1+i2<br />&nbsp; end<br />end<br />fibUpTo(1000) { |f| print f, " " } #block<br />当执行到Yield语句的时候，会执行block中的内容，知道满足条件。<br />5.rails 国际化：globlize 插件：<br /><a href="http://globalize.rubyforge.org/" target="_blank">http://globalize.rubyforge.org/</a><br />&nbsp; class Product &lt; ActiveRecord::Base<br />&nbsp;&nbsp;&nbsp; composed_of :price, :class_name => "Globalize::Currency",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :mapping => [ %w(price cents) ]<br />&nbsp; end<br /><br />&nbsp; product.price -> "SFr. 483'232.43"<br /><br />6.auto_discovery_link_tag(type = :rss, url_options = {}, tag_options = {}) <br />Returns a link tag that browsers and news readers can use to auto-detect an RSS or ATOM feed. The type can either be :rss (default) or :atom. Control the link options in url_for format using the url_options. You can modify the LINK tag itself in tag_options. <br /><br />Tag Options: <br /><br />:rel - Specify the relation of this link, defaults to "alternate" <br />:type - Override the auto-generated mime type <br />:title - Specify the title of the link, defaults to the type <br /><br /> auto_discovery_link_tag(:rss, {:action => "feed"}, {:title => "My RSS"}) # =><br />&nbsp;&nbsp;&nbsp; &lt;link rel="alternate" type="application/rss+xml" title="My RSS" href="http://www.curenthost.com/controller/feed" /><br />7.content_for(name, content = nil, &amp;block) <br />Calling content_for stores the block of markup for later use. Subsequently, you can make calls to it by name with yield in another template or in the layout. <br /><br />Example: <br /><br />&nbsp; &lt;% content_for("header") do %><br />&nbsp;&nbsp;&nbsp; alert('hello world')<br />&nbsp; &lt;% end %><br />You can use yield :header anywhere in your templates. <br /><br />&nbsp; &lt;%= yield :header %><br /><br />8.textilize(text) <br />Returns the text with all the Textile codes turned into HTML tags. This method is only available if RedCloth is available. <br />9.sanitize(html) <br />Sanitizes the html by converting &lt;form> and &lt;script> tags into regular text, and removing all "onxxx" attributes (so that arbitrary Javascript cannot be executed). It also removes href= and src= attributes that start with "javascript:". You can modify what gets sanitized by defining VERBOTEN_TAGS and VERBOTEN_ATTRS before this Module is loaded. <br /><br />&nbsp; sanitize('&lt;script> do_nasty_stuff() &lt;/script>')<br />&nbsp;&nbsp; => &amp;lt;script> do_nasty_stuff() &amp;lt;/script><br />&nbsp; sanitize('&lt;a href="javascript: sucker();">Click here for $100&lt;/a>')<br />&nbsp;&nbsp; => &lt;a>Click here for $100&lt;/a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lihbobo.javaeye.com/blog/205783#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Jun 2008 14:31:17 +0800</pubDate>
        <link>http://lihbobo.javaeye.com/blog/205783</link>
        <guid>http://lihbobo.javaeye.com/blog/205783</guid>
      </item>
          <item>
        <title>model级别cache的（一）</title>
        <author>lihbobo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lihbobo.javaeye.com">lihbobo</a>&nbsp;
                    链接：<a href="http://lihbobo.javaeye.com/blog/150503" style="color:red;">http://lihbobo.javaeye.com/blog/150503</a>&nbsp;
          发表时间: 2007年12月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.ruby-lang.org.cn/forums/thread-1916-1-2.html" target="_blank">http://www.ruby-lang.org.cn/forums/thread-1916-1-2.html</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lihbobo.javaeye.com/blog/150503#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Dec 2007 16:00:20 +0800</pubDate>
        <link>http://lihbobo.javaeye.com/blog/150503</link>
        <guid>http://lihbobo.javaeye.com/blog/150503</guid>
      </item>
          <item>
        <title>Ruby 和 Rails 的国际化与本地化技术</title>
        <author>lihbobo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lihbobo.javaeye.com">lihbobo</a>&nbsp;
                    链接：<a href="http://lihbobo.javaeye.com/blog/145688" style="color:red;">http://lihbobo.javaeye.com/blog/145688</a>&nbsp;
          发表时间: 2007年12月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原文见此： <a href="https://www6.software.ibm.com/developerworks/cn/education/web/wa-rails-li/section4.html" target="_blank">https://www6.software.ibm.com/developerworks/cn/education/web/wa-rails-li/section4.html</a><br /><br />安装 ruby-gettext gem 包； <br />编写 hello_i18n.rb 程序； <br />抽取代码中需要翻译的内容串，创建 POT 文件； <br />创建、翻译 PO 文件并创建 MO 文件； <br />运行本地化后的程序； <br /><br />运行 gem install gettext 安装gettext 插件。<br /><br />用以下命令检验是否按装成功：<br />irb(main):001:0> require 'rubygems'<br />=> true<br />irb(main):002:0> require 'gettext'<br />=> true<br />irb(main):003:0> GetText<br />=> GetText<br /><br />编译Hello_i18n.rb 文件：<br />require 'rubygems'<br />require 'gettext'<br />include GetText<br /><br />bindtextdomain("hello_i18n")<br />print _("Hello I18N World\n")<br /><br />生成pot文件：<br />rgettext hello_i18n.rb -o hello_i18n.pot<br /><br />Copy POT 文件成 Po 文件<br /><br />翻译po 文件，记住必须以UTF-8的格式编码<br /><br />创见MO文件，<br />记住最好位于 Ruby 安装文件夹下的 share/locale/zh_CN/LC_MESSAGES/<br />文件夹下， <br />用 rmsgfmt hello_i18n.po -o /usr/local/share/locale/zh_CN/LC_MESSAGES/hello_i18n.mo<br />或者 GUN的Msgfmt 程序来生成MO文件。<br /><br />用 ruby -d hello_i18n.rb 来运行。
          <br/><br/>
          <span style="color:red;">
            <a href="http://lihbobo.javaeye.com/blog/145688#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 03 Dec 2007 19:57:28 +0800</pubDate>
        <link>http://lihbobo.javaeye.com/blog/145688</link>
        <guid>http://lihbobo.javaeye.com/blog/145688</guid>
      </item>
          <item>
        <title>在Windows平台使用Apache2.2和Mongrel运行Ruby on Rails</title>
        <author>lihbobo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lihbobo.javaeye.com">lihbobo</a>&nbsp;
                    链接：<a href="http://lihbobo.javaeye.com/blog/137934" style="color:red;">http://lihbobo.javaeye.com/blog/137934</a>&nbsp;
          发表时间: 2007年11月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          此文是转载Robbin的，目的是为了我查阅方便，原文见此：<a href="http://www.javaeye.com/topic/43290">www.javaeye.com/topic/43290</a><br />
<br />
<div>一、安装Ruby、rails、mongrel和Apache2.2</div>
<div>&nbsp;</div>
<div>从rubyforge网站下载One-Click Ruby Install，运行安装程序，就安装好了ruby和rubygems。</div>
<div>&nbsp;</div>
<div>运行命令：</div>
<div><font>gem install rails &ndash;y</font></div>
<div><font>gem install mongrel &ndash;y</font></div>
<div><font>gem install mongrel_service -y</font></div>
<div>安装好了rails和mongrel</div>
<div>&nbsp;</div>
<div>从Apache网站下载Windows版本的Apache2.2，运行安装程序，就安装好了Apache2.2。</div>
<div>&nbsp;</div>
<div>二、把Mongrel作为Services启动</div>
<div>&nbsp;</div>
<div><font>mongrel_rails service::install -N depot -c d:\Rubyproject\depot -p 3000 &ndash;e production</font></div>
<div>-N指明服务名称，-d指明rails应用的目录，-p是mongrel监听的tcp端口，-e是启动模式为生产模式</div>
<div>&nbsp;</div>
<div>这样打开控制面版|管理工具|服务，就可以发现增加了一项名为&ldquo;depot&rdquo;的服务，就可以通过控制面版来管理服务了。如果需要命令行启动和关闭该服务，那么：</div>
<div><font>mongrel_rails service::start -N depot</font></div>
<div><font>mongrel_rails service::stop -N depot</font></div>
<div>&nbsp;</div>
<div>如果需要从服务中注销该项服务，那么：</div>
<div><font>mongrel_rails service::remove -N depot</font></div>
<div>&nbsp;</div>
<div>如果需要安装多个mongrel实例，那么可以这样：</div>
<div><font>mongrel_rails service::install -N depot0 -c d:\Rubyproject\depot -p 3000 &ndash;e production</font></div>
<div><font>mongrel_rails service::install -N depot1 -c d:\Rubyproject\depot -p 3001 &ndash;e production</font></div>
<div>诸如此类。</div>
<div>&nbsp;</div>
<div>三、配置Apache2.2</div>
<div>&nbsp;</div>
<div>用编辑工具打开Apache2.2目录下面的conf/httpd.conf，需要取消如下模块的注释：</div>
<div><font>LoadModule proxy_module modules/mod_proxy.so</font></div>
<div><font>LoadModule proxy_balancer_module modules/mod_proxy_balancer.so</font></div>
<div><font>LoadModule proxy_http_module modules/mod_proxy_http.so</font></div>
<div>如果你希望对页面输出使用压缩，也需要取消如下模块的注释：</div>
<div><font>LoadModule deflate_module modules/mod_deflate.so</font></div>
<div>&nbsp;</div>
<div>然后按如下内容配置基于HTTP代理的负载均衡：</div>
<div>  <font>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml">
    <li class="alt"><span><span>ProxyRequests&nbsp;Off&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">Proxy</span><span>&nbsp;balancer://myCluster</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;BalancerMember&nbsp;http://localhost:3000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;BalancerMember&nbsp;http://localhost:3001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">Proxy</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">VirtualHost</span><span>&nbsp;*:80</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;ServerName&nbsp;www.xxx.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;DocumentRoot&nbsp;d:/rubyproject/depot/public&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;ProxyPass&nbsp;/images&nbsp;!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;ProxyPass&nbsp;/stylesheets&nbsp;!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;ProxyPass&nbsp;/javascripts&nbsp;!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;ProxyPass&nbsp;/&nbsp;balancer://myCluster/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;ProxyPassReverse&nbsp;/&nbsp;balancer://myCluster/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;ProxyPreserveHost&nbsp;on&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">VirtualHost</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; <br />
    </span></span></li>
</ol>
</div>
</font></div>
<div>&nbsp;</div>
<div>myCluster定义了群集中的每个mongrel应用服务器节点。ProxyPass /images !指明该URL开始的请求不代理给Mongrel群集，而由Apache自己处理。重起Apache，然后打开浏览器访问<a href="http://www.xxx.com/">www.xxx.com</a>，检查配置是否正确。</div>
<div>&nbsp;</div>
<div>至此，在Windows Server上面一个具备良好稳定性和性能的Ruby on rails生产环境就搭建好了。</div>
<div>&nbsp;</div>
<div>对于页面输出，还可以使用mod_deflate进行输出内容压缩，以提高页面下载速度，这个就留给大家自己配置了。</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lihbobo.javaeye.com/blog/137934#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 Nov 2007 20:27:06 +0800</pubDate>
        <link>http://lihbobo.javaeye.com/blog/137934</link>
        <guid>http://lihbobo.javaeye.com/blog/137934</guid>
      </item>
          <item>
        <title>rails创建工程</title>
        <author>lihbobo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lihbobo.javaeye.com">lihbobo</a>&nbsp;
                    链接：<a href="http://lihbobo.javaeye.com/blog/136153" style="color:red;">http://lihbobo.javaeye.com/blog/136153</a>&nbsp;
          发表时间: 2007年10月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Rails 创建工程的一般步骤：<br />
创建一个工程： rails 工程名（例如：CookBook）<br />
启动这个工程： 在命令窗口，移动到CookBook目录下<br />
输入： ruby script/server<br />
创建一个控制器类： ruby script/generate controller MyTest, 产生的文件如下：my_test_controller.rb.<br />
创建数据库：<br />
由于rails定义了三个运行时的环境，所以要至少创建三个数据库（development, test, and production），<br />
mysql -u root<br />
create database XXX_dev;<br />
create database XXX_test;<br />
create database XXX_prod;<br />
grant all privileages on XXX_dev .* to 'XX_user' @'localhost'  identified  by  'password';<br />
grant all privileages on XXX_test.* to 'XX_user' @'localhost'  identified  by  'password';<br />
grant all privileages on XXX_prod.* to 'XX_user' @'localhost'  identified  by  'password';</p>
<p>mysql&gt; grant all privileges on *.* to test@localhost identified by 'test' with grant option; <br />
<br />
这句增加一个本地具有所有权限的test用户（超级用户），密码是test。ON子句中的*.*意味着&quot;所有数据库、所有表&quot;。with grant option表示它具有grant权限。</p>
<p><a href="http://jed.dzhope.com/read.php/22.htm" title="mysql 授权" target="_blank">http://jed.dzhope.com/read.php/22.htm</a>
<br />
create database.sql(省略)<br />
mysql XXX_dev  -u XX_user -p password &lt; database.sql</p>
<p>mysqladmin -u root create XXXX_database_name<br />
<strong>mysql XXX_dev -u XX_user -p &lt;&lt;&lt; &quot;show tables;&quot;</strong>
 <br />
利用Migration创造数据库：<br />
ruby script/generate migration <strong>create_database</strong>
 <br />
Migration --数据迁移：<br />
<span style="font-size: x-small;"><span style="font-family: 宋体;">模型生成器</span>
<span lang="EN-US">(model generator) </span>
<span style="font-family: 宋体;">创建的</span>
<span lang="EN-US">migration</span>
<span style="font-family: 宋体;">迁移：ruby script/generate model 模型名， 会创建模型与表的关联。<br />
</span>
<span lang="EN-US">只创建migration 本身：script/generate migration add_price_column<br />
使用rake 的db:migrate 任务来运行migration迁移。<br />
通过创建rails类的ActiveRecord：：Migration的子类来完成Migration的迁移，每个类中至少包含一个up和down 方法，<br />
class XXXXX &lt; ActiveRecord::migration<br />
def self.up<br />
add_column :orders(表名)， :email(列名), :string(类型)<br />
end<br />
def self.down<br />
remove_column :orders, :email<br />
end<br />
end<br />
</span>
</span>
<span style="font-size: x-small;"><span style="font-family: 宋体;">由</span>
<span lang="EN-US">migration</span>
<span style="font-family: 宋体;">迁移支持的类型是：</span>
<span lang="EN-US"> :binary</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">:boolean</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">:date</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">:datetime</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">:float</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">:integer</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">:string</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">:text</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">:time</span>
<span style="font-family: 宋体;">，和</span>
<span lang="EN-US">:timestamp<br />
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: x-small;"><span style="font-family: 宋体;">当在一个</span>
<span lang="EN-US">migration</span>
<span style="font-family: 宋体;">迁移内定义一个列时，你可指定三个选项。每个选项由</span>
<span lang="EN-US">key=&gt;value</span>
<span style="font-family: 宋体;">对给出。</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: x-small;"><span lang="EN-US">1</span>
<span style="font-family: 宋体;">、</span>
<span lang="EN-US">:null =&gt; true or false<span>  </span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 42pt;"><span style="font-size: x-small;"><span style="font-family: 宋体;">如果为</span>
<span lang="EN-US"> true</span>
<span style="font-family: 宋体;">，则基础列被添加一个不能为</span>
<span lang="EN-US">null</span>
<span style="font-family: 宋体;">的约束</span>
<span lang="EN-US">(</span>
<span style="font-family: 宋体;">如果数据库支持的话</span>
<span lang="EN-US">)</span>
<span style="font-family: 宋体;">。</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: x-small;"><span lang="EN-US">2</span>
<span style="font-family: 宋体;">、</span>
<span lang="EN-US">:limit =&gt; size</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 42pt;"><span style="font-size: x-small;"><span style="font-family: 宋体;">设置字段尺寸的限制。这基本上出现在用</span>
<span lang="EN-US">string</span>
<span style="font-family: 宋体;">创建数据库的列时。</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: x-small;"><span lang="EN-US">3</span>
<span style="font-family: 宋体;">、</span>
<span lang="EN-US">:default =&gt; value</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: x-small;"><span lang="EN-US">Renaming Columns (</span>
<span style="font-family: 宋体;">重命名列</span>
<span lang="EN-US">)</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: medium;"><strong><span lang="EN-US">scaffold ：</span>
</strong>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: x-small;"><span lang="EN-US">脚手架是一种预定义的框架，它可以生成一个简单的CRUD结构，两种方式来定义：</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: x-small;"><span lang="EN-US">一种是在控制器的文件下加上 scaffold :控制器名称， 例如：</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: x-small;"><span lang="EN-US">class RecipeController &lt; ApplicationController</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: x-small;"><span lang="EN-US">    scaffold :recipe<br />
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: medium;"><span lang="EN-US"><span style="font-size: x-small;">end</span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: medium;"><span lang="EN-US"><span style="font-size: x-small;">一种是：</span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: medium;"><span lang="EN-US"><span style="font-size: x-small;">创建控制器：</span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: medium;"><span lang="EN-US"><span style="font-size: x-small;">ruby script\server controller 表名</span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: medium;"><span lang="EN-US"><span style="font-size: x-small;">创建模型：</span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: medium;"><span lang="EN-US"><span style="font-size: x-small;">ruby script\server model 表名<br />
</span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: medium;"><span lang="EN-US"> <br />
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-size: medium;"><span lang="EN-US"><br />
</span>
</span>
</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lihbobo.javaeye.com/blog/136153#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 28 Oct 2007 15:37:54 +0800</pubDate>
        <link>http://lihbobo.javaeye.com/blog/136153</link>
        <guid>http://lihbobo.javaeye.com/blog/136153</guid>
      </item>
          <item>
        <title>rails 的安装</title>
        <author>lihbobo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lihbobo.javaeye.com">lihbobo</a>&nbsp;
                    链接：<a href="http://lihbobo.javaeye.com/blog/136147" style="color:red;">http://lihbobo.javaeye.com/blog/136147</a>&nbsp;
          发表时间: 2007年10月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>尽管很多地方都有讲如何安装Ruby， rails 和Mysql的文章，但是我还是要把我的安装过程记录下来。</p>
<p>Ruby版本：ruby-186-25.</p>
<p>rails安装：</p>
<p>(1)自动安装：打开Ruby目录下的&nbsp; Rubygem package manger, 输入：gem install rails --remote</p>
<p>需要按提示输入&ldquo;Y&rdquo;， 如果失败主要有两个原因，1.不能连接上网站<font face="Arial"><a href="http://gems.rubyforge.org。 ">http://gems.rubyforge.org。 </a></font></p>
<p><font face="Arial">2.Rubygem的版本太旧（一般需要0.9以上，主要在Ruby-182以下的版本有这种情况）。</font></p>
<p>(2)手动安装：</p>
<p>无法自动安装将只有手动安装</p>
<p>手动安装需要下载以下文件：activerecord, actionpack, actionmailer, actionwebservice, (应该还需要一些其他文件，稍后补上)</p>
<p>本次自动安装成功，以后会补上手动安装细节。</p>
<p>Mysql安装：</p>
<p>需要注意Mysql的版本是否支持现版本的Ruby和rails，其他安装正常。</p>
<p>你可能需要一个Mysql的数据库图形界面，如：PhpMyAdmin， <font size="2">mysql-front,mysql-query 等等。</font></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lihbobo.javaeye.com/blog/136147#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 28 Oct 2007 14:26:52 +0800</pubDate>
        <link>http://lihbobo.javaeye.com/blog/136147</link>
        <guid>http://lihbobo.javaeye.com/blog/136147</guid>
      </item>
          <item>
        <title>rails框架下的文件夹及其作用</title>
        <author>lihbobo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lihbobo.javaeye.com">lihbobo</a>&nbsp;
                    链接：<a href="http://lihbobo.javaeye.com/blog/136142" style="color:red;">http://lihbobo.javaeye.com/blog/136142</a>&nbsp;
          发表时间: 2007年10月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>从07年3月份开始研究rails, 到了6月份终止，期间有很多收获，没有记录下来，现在有了些空余时间，开始继续学习，才发现，好记性不如乱笔头，后悔没将当初的所得记下来，现在发现来最最基本的都忘了差不多了。。</p>
<p>创建一个rails框架，以下包含这些文件，其作用如下：（参考《Rails Cookbook》第二章，2.1节）</p>
<p><em><span class="docPubcolor">app</span></em></p>
<dd>
<p class="docList">Contains <a name="Iid13156"></a>all the code that's specific to this particular application. Most of Rails development happens within the <em>app</em> directory.</p>
</dd><dd>
<p class="docList">包含所有这个应用的代码。大多数Rails的开发都在这个目录下。</p>
</dd><dd>
<p class="docList"><em><span class="docPubcolor">app/controllers</span></em></p>
</dd><dd>
<p class="docList">Contains controller classes, all<a name="Iid13195"></a> of which should inherit <tt>ActionController::Base</tt>. Each of these files should be named after the model they control followed by <em>_controller.rb</em> (e.g., <em>cookbook_controller.rb</em>) for automatic URL mapping to occur.</p>
</dd><dd>
<p class="docList">包含控制器的类，所有的应该继承自ActionController：：Base。所有这些文件中的每一个应该命名为在他们的Model名后面加上_controller.rb（例如，<em>cookbook_controller.rb</em>），目的是URL能够自动匹配到他们。</p>
</dd><dd>
<p class="docList"><em><span class="docPubcolor">app/models</span></em></p>
</dd><dd>
<p class="docList">Holds<a name="Iid13241"></a> models that should be named like <em>cookbook.rb</em>. Most of the time model classes inherit from <tt>ActiveRecord::Base</tt>.</p>
</dd><dd>
<p class="docList">Models 应该被命名为象 Cookbook.rb, 大多数Model类继承自ActiveRecord::Base.</p>
</dd><dd>
<p class="docList"><em><span class="docPubcolor">app/views</span></em></p>
</dd><dd>
<p class="docList">Holds the<a name="Iid13280"></a> template files for the view that should be named, such as <span class="docEmphasis">cookbook/index.rhtml</span> for the <tt>CookBookController#index</tt> action. All views use eRuby syntax. This directory can also be used to keep stylesheets, images, and so on, that can be symlinked to public.</p>
</dd><dd>
<p class="docList">所有的能够看见的模板文件应该这样命名，例如，<span class="docEmphasis">cookbook/index.rhtml</span> 是<tt>CookBookController#index</tt> action所产生的，所有的Views文件使用eRuby语法。这个目录也能被使用保存样式表，图片等等，他们能够被动态的链接。</p>
</dd><dd>
<p class="docList"><em><span class="docPubcolor">app/helpers</span></em></p>
</dd><dd>
<p class="docList">Holds<a name="Iid13319"></a> view helpers that should be named, such as <em>weblog_helper.rb</em>.</p>
</dd><dd>
<p class="docList">帮助文件应该这样命名， 例如，<em>weblog_helper.rb</em>.</p>
</dd><dd>
<p class="docList"><em><span class="docPubcolor">app/apis</span></em></p>
</dd><dd>
<p class="docList">Holds<a name="Iid13353"></a> API classes for web services.</p>
</dd><dd>
<p class="docList">保存API类为Web服务。</p>
</dd><dd>
<p class="docList"> </p>
<p><em><span class="docPubcolor">config</span></em></p>
</dd><dd>
<p class="docList">Contains<a name="Iid13381"></a> configuration files for the Rails environment, the routing map, the database, and other dependencies.</p>
</dd><dd>
<p class="docList">包含配置文件为Rails的环境，路径映射，以及其他的依赖。</p>
</dd><dd>
<p class="docList"> </p>
<p><em><span class="docPubcolor">components</span></em></p>
</dd><dd>
<p class="docList">Holds self-contained<a name="Iid13411"></a> mini applications that can bundle together controllers, models, and views.</p>
</dd><dd>
<p class="docList">自动包含绑定控制，模型，视图的最小应用。</p>
</dd><dd>
<p class="docList"> </p>
<p><em><span class="docPubcolor">db</span></em></p>
</dd><dd>
<p class="docList">Contains<a name="Iid13440"></a> the database schema in <em>schema.rb</em>. <em>db/migrate</em> contains all the sequence of migrations for your schema.</p>
</dd><dd>
<p>包含数据库的计划在<em>schema.rb。db/migrate</em>  包含所有一系列的计划的migrations。</p>
</dd><dd>
<p> </p>
<p><em><span class="docPubcolor">lib</span></em></p>
</dd><dd>
<p class="docList">Contains <a name="Iid13480"></a>application-specific librariesbasically, any kind of custom code that doesn't belong under controllers, models, or helpers. This directory is in the load path.</p>
</dd><dd>
<p class="docList">包含基本的特殊应用库，以及各种定制的代码，不属于控制器，模型和帮助文件夹下的。这个目录在导入的路径中。</p>
</dd><dd>
<p class="docList"> </p>
<p><em><span class="docPubcolor">public</span></em></p>
</dd><dd>
<p class="docList">The directory <a name="Iid13514"></a>available for the web server. Contains subdirectories for images, stylesheets, and Java scripts. Also contains the dispatchers and the default HTML files.</p>
</dd><dd>
<p class="docList">这个目录使所有的Web服务可能。包含子目录为了保存图片，样式表，Java scripts脚本，也包含可调度的和默认的HTML文件。</p>
</dd><dd>
<p class="docList"><em><span class="docPubcolor">script</span></em></p>
</dd><dd>
<p class="docList">Holds helper<a name="Iid13545"></a> scripts for automation and generation.</p>
</dd><dd>
<p class="docList">保存helper脚本自动的和产生的。</p>
<dl class="docList"><dt><br />
<p><em><span class="docPubcolor">test</span></em></p>
</dt><dt>
<p><em><span class="docPubcolor">          </span></em>Contains unit <a name="Iid13573"></a>and functional tests along with fixtures.</p>
</dt></dl>
<p class="docList">             包含单元和功能测试的代码。<a name="Iid13601"></a></p>
<dl class="docList"><dt><br />
<p><em><span class="docPubcolor">vendor</span></em></p>
</dt><dd>
<p class="docList">Holds external <a name="Iid13601"></a>libraries that the application depends on. Also includes the plug-ins subdirectory. This directory is in the load path.</p>
</dd><dd>
<p class="docList">包含应用程序依赖的第三方库，也包含子目录的插件。这个目录在导入路径中。</p>
</dd><dt>这个说的可能更加形象：</dt><dd>１：Controllers 目录存放 rails 应用中相应的 controller 类，controller 类处理来自用户 的 web 请求。
<p>２：views 目录存放相应的模板文件，模板文件填充数据后，转换为 html 格式传递给用户的浏 览器。</p>
<p><br />
３：models 目录存放数据模型类，模型类封装了数据库中的数据。很多框架在数据模型层都做 的比较复杂，用过 rails 后，你会发现它非常容易使用。</p>
<p><br />
４：helpers 目录存放了简化 Controllers, models, views 使用的帮助类。</p>
</dd></dl></dd>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lihbobo.javaeye.com/blog/136142#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 28 Oct 2007 13:56:30 +0800</pubDate>
        <link>http://lihbobo.javaeye.com/blog/136142</link>
        <guid>http://lihbobo.javaeye.com/blog/136142</guid>
      </item>
          <item>
        <title>浅谈软件测试人员的技术学习</title>
        <author>lihbobo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lihbobo.javaeye.com">lihbobo</a>&nbsp;
                    链接：<a href="http://lihbobo.javaeye.com/blog/116712" style="color:red;">http://lihbobo.javaeye.com/blog/116712</a>&nbsp;
          发表时间: 2007年08月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>大学时很迷糊，什么都想学，C， C++， Java， VB， VC, .Net（ASP，C#）似乎每种语言都接触过，后来参加网络工程师的考试，对网络也似乎有了一定的了解，但终究因为条件和能力的限制，尤其是基础的缺失，导致自己自己最终是一无所获。</div>
<div>参加工作，做软件测试，社会上听的多了，起初真的看不起这一行（很奇怪大学里软件测试书看不懂），在公司就要服从组织安排，后来接触到Ruby，一直用到现在，也感觉是小有收获，此事后话，后面详谈。</div>
<div>进入项目以后，做过一段时间的性能测试，时间不长，但收获很大，知道了Linux， Apache 的配置，这在大学对我来说是天方夜谭的东西，在其他人的帮助下很快解决，还接触到动态脚本语言Python， 以及其扩展Jython 和性能测试工具Testmaker，知道了什么是测试代理和虚拟用户，对Python语言的研究有3个月，后来转到自动化，一个基于Ruby 和Watir 的开源框架的扩展，用的时间长了，就产生了厌倦（后来证明太小看Ruby的强大功能了），因为项目本身是PHP做的，又去学习了一下PHP，涉及到Web开发的知识太多（Html，javascript, CSS+Div）,自己也仅仅能够抽出周末时间去做，大约学了3-4个月，做了一个小的Demo，也仅仅算是入了门。</div>
<div>进入到2007年以来，接触到了大量关于Ruby On Rails的报道，开始关注这个东东，从最初的配置开发环境，到后来吃力的阅读英文教材，在到现在已经算是可以上手，自己总算有点成绩， 也渐渐体会到了Ruby语言的强大。</div>
<div>我未来的发展方向在哪里？Ruby On Rails 终究只是个新兴的事物，在国内远没有达到商业开发的程度， 基于PHP+Mysql的开发是主流，但是我工作的本身不足以让我抽出太多的时间去研究学习，何况我涉及到了Ruby On Rails， 就不想在去用PHP，这种几倍代码量的东西去开发同样的东西。</div>
<div>对于Java， Java终究是要学的，不仅仅是因为他是主流，更主要是他的面向对象的思想，尤其是需要与Ruby这样的动态语言做比较，同时测试也离不开他。</div>
<div>现在看来我的确太轻视测试了，测试应该是一个比较好的选择，测试不仅仅涉及到测试的本身（写Test case, 找Bug）和QA（质量保证），更深入可能涉及到架构的问题，比如性能的问题可能牵扯到系统的配置，还有可能涉及到对服务器（Linux等）做进一步的开发， 这其实是一个很有挑战性的工作，只是眼界的狭隘和世俗的观念，使我仅仅将测试定位在很低级别的层次上，这是远远不够的。</div>
<div>好在，我现在已经开始自己尝试着去改进一些自动化测试的框架了，测试驱动开发（TDD）其实就是一种很好的指导思想，开发测试本来就没有什么先后之分的，好的测试框架就应该能够融合在开发中, 好的测试框架同样需要很好的架构，需要面向对象的思想去设计， Thoughtwork 公司的selenium, 应该就是一个很好的启发，关注测试发展的新动向，使之更为人性化，更加方便，更加健壮。</div>
<div>做为现在一种流行的趋势--开源来讲， 测试人员应该更多去关注到这个领域，开源将会使我们越来越多的使用开源产品，测试人员应该有责任去关注一些开源产品在项目中的使用。基于Linux系统的开发，以及对Linux有更多更深入的了解，也是我应该关注到的。</div>
<div>对于数据库这方面， 测试人员也要有充分的了解，我在接触到Mysql之前对数据库的概念是很模糊的，大学尽管学过，但更多只是局限在概念。所以基于数据库方面也要有充分的知识。</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lihbobo.javaeye.com/blog/116712#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 26 Aug 2007 00:57:58 +0800</pubDate>
        <link>http://lihbobo.javaeye.com/blog/116712</link>
        <guid>http://lihbobo.javaeye.com/blog/116712</guid>
      </item>
          <item>
        <title>Selenium, 我迄今为止见到最好的Web测试工具</title>
        <author>lihbobo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lihbobo.javaeye.com">lihbobo</a>&nbsp;
                    链接：<a href="http://lihbobo.javaeye.com/blog/93540" style="color:red;">http://lihbobo.javaeye.com/blog/93540</a>&nbsp;
          发表时间: 2007年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">Selenium， 我就不多介绍了，Thoughtwork公司开发的一个专门针对Web测试的一个测试工具，个人觉得这个工具在功能测试中的确有独到的设计，估计这个公司的老兄们阅历是相当的丰富，深知现在开源的Web测试工具中的种种弊端，所以一股脑儿解决了很多Web功能测试工具的弊端。</font></p>
<p>个人在公司的项目是一个大型的商业网站（Alex 排名世界前1000吧），主要负责Tesecase的自动化工作，众所周知，Web的测试在做完单元测试后就是GUN测试和功能测试，其中功能测试是重中之重，想想看大约3000个Testcase（没有具体统计过）做自动化，本身就是一件超级恐怖的事件，曾经一段时间我们的测试代码超过了开发代码。我们在项目中选用的自动化工具是基于Ruby语言开发的开源工具Watir，watir 的确有它的优势，同HttpUint 和HtmlUnit等工具相比，它可以实现可视化输出，由于它是基于Javascript开发的，所有它能很准确的定位DOM对象，这些是上述其他工具不能比拟的，个人认为基于动态语言Ruby等开发的测试工具比基于Java开发的测试工具在Web测试的功能测试中要好用。但是Watir有它的弊端，需要安装插件（Firewatir)才能支持Firefox 浏览器，个人也曾经负责过将watir写的代码通过FireWatir运行到Firefox中， 其中因为它们本身内部机制的不同导致的差异，需要付出相当的经历去应对，其次watir 没有记录功能，所有的代码都需要手写，交互性差，通常需要等到代码稳定后才能开始做，代码周期长，由于开源工具本身不够健壮，使得测试很容易失败。。</p>
<p>这一切现在似乎都可以解决，<font face="Arial">Selenium，一个继承了Watir良好处理机制的工具，它同时又可以实现记录，和良好的交互性测试（随时可以在浏览器中运行），同时它可以将记录的代码转化为你所熟悉的语言Ruby，Python等，我观察了一下，这些代码是相当不错的，几乎就是Testcase的自动化，我曾经用过一些工具的自动记录（Testmaker）和手动记录（Yawet）功能，所记录的代码，只能说能用来做参考而已。。</font></p>
<p>可以这样说Selenium暂时能够解决我在以前测试中遇到的所有困难和不便，也许它也有它的劣势和弊端，但是它本身所带来的这种设计思想，在做测试的设计时是应该仔细考虑的，一个工具如何能在管理和效率上来给测试带来方便，的确是一门学问，毕竟我们并不都需要那些似乎可以通吃一切的昂贵的测试工具。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lihbobo.javaeye.com/blog/93540#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 24 Jun 2007 00:14:14 +0800</pubDate>
        <link>http://lihbobo.javaeye.com/blog/93540</link>
        <guid>http://lihbobo.javaeye.com/blog/93540</guid>
      </item>
      </channel>
</rss>