<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>sun</title>
    <description></description>
    <link>http://googledave.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>如何进行有效沟通</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/224901" style="color:red;">http://googledave.javaeye.com/blog/224901</a>&nbsp;
          发表时间: 2008年08月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一个团队不能有效地沟通，就不能很好地协作。而实际上，沟通是一件非常难的事。例如，有业绩考核指标的销售员在一起进行沟通时，业绩好的销售员为了保证自己的领先地位，很有可能不把自己认为有效的那套方法全盘说出来；中层领导认为经理说得或者做得并不对，但出于自己职位的考虑，他可能不会向经理说出来；而有的员工出于对领导的不满等，不愿意把自己真实的想法说出来，等等。<br /> <br />　　下面的故事说明，有效沟通并不是一件简单的事：<br /><br />　　两个旅行中的天使到一个富有的家庭借宿。这家人对他们并不友好，并且拒绝让他们在舒适的客房过夜，而是在冰冷的地下室给他们找了一个角落。当他们铺床时，较老的天使发现墙上有一个洞，就顺手把它修补好了。年轻的天使问为什么，老天使答到：“有些事并不像它看上去那样。”<br /><br />　　第二晚，两人到了一个非常贫穷的农家借宿。主人夫妇俩对他们非常热情，把仅有的一点点食物拿出来款待客人，然后又让出自己的床铺给两个天使。第二天一早，两个天使发现农夫和他的妻子在哭泣，他们唯一的生活来源——一头奶牛死了。年轻的天使非常愤怒，他质问老天使为什么会这样：第一个家庭什么都有，老天使还帮助他们修补墙洞，第二个家庭尽管如此贫穷还是热情款待客人，而老天使却没有阻止奶牛的死亡。<br /><br />　　“有些事并不像它看上去那样。”老天使答道，“当我们在地下室过夜时，我从墙洞看到墙里面堆满了金块。因为主人被贪欲所迷惑，不愿意让别人来分享这笔财富，所以我把墙洞填上了。昨天晚上，死亡之神来召唤农夫的妻子，我让奶牛代替了她。所以有些事并不像它看上去那样。”<br /><br />　　有些时候事情的表面并不是它实际应该的样子。而有效的沟通则可以弄清楚事情的真相，也可以校正自己在某些方面的偏差。<br /><br />　　曾经有人说，如果世界上的人都能够很好地进行沟通，那么就不会引起误解，就不会发生战争。但事实上，世界历史上战争几乎不曾中断过，这说明沟通的困难程度了。<br /><br />　　那么如何进行有效沟通呢？<br /><br />　　在团队里，要进行有效沟通，必须明确目标。对于团队领导来说，目标管理是进行有效沟通的一种解决办法。在目标管理中，团队领导和团队成员讨论目标、计划、对象、问题和解决方案。由于整个团队都着眼于完成目标，这就使沟通有了一个共同的基础，彼此能够更好地了解对方。即便团队领导不能接受下属成员的建议，他也能理解其观点，下属对上司的要求也会有进一步的了解，沟通的结果自然得以改善。如果绩效评估也采用类似办法的话，同样也能改善沟通。<br /><br />　　在团队中，我认为，身为领导者，善于利用各种机会进行沟通，甚至创造出更多的沟通途径，与成员充分交流等并不是一件难事。难的是创造一种让团队成员在需要时可以无话不谈的环境。<br /><br />　　对于个体成员来说，要进行有效沟通，可以从以下几个方面着手：<br /><br />　　一是必须知道说什么，就是要明确沟通的目的。如果目的不明确，就意味着你自己也不知道说什么，自然也不可能让别人明白，自然也就达不到沟通的目的。<br /><br />　　二是必须知道什么时候说，就是要掌握好沟通的时间。在沟通对象正大汗淋漓地忙于工作时，你要求他与你商量下次聚会的事情，显然不合时宜。所以，要想很好地达到沟通效果，必须掌握好沟通的时间，把握好沟通的火候。<br /><br />　　三是必须知道对谁说，就是要明确沟通的对象。虽然你说得很好，但你选错了对象，自然也达不到沟通的目的。<br /><br />　　四是必须知道怎么说，就是要掌握沟通的方法。你知道应该向谁说、说什么，也知道该什么时候说，但你不知道怎么说，仍然难以达到沟通的效果。沟通是要用对方听得懂的语言——包括文字、语调及肢体语言，而你要学的就是透过对这些沟通语言的观察来有效地使用它们进行沟通。<br /><br />　　以上四个“简单”问题，可以用来自我检测，看看你是否能进行有效的沟通。<br /><br />　　能够进行有效的沟通是一件很难的事。
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/224901#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</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>Wed, 06 Aug 2008 10:44:46 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/224901</link>
        <guid>http://googledave.javaeye.com/blog/224901</guid>
      </item>
      <item>
        <title>FastCGI中文参考手册</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/223741" style="color:red;">http://googledave.javaeye.com/blog/223741</a>&nbsp;
          发表时间: 2008年08月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          主题 FastCGI中文参考手册 (Perl语言相关部分)<br />作者 hoowa .sun<br />出自 www.perlchina.org<br /><br />想必所有人都了解CGI技术的通用性与效率有多糟糕。那么本文所描述的所有内容仅限于一种可以大幅度提高页面处理技术的东东，它的名字叫FastCGI，他的速度效率最少要比CGI技术提高5倍以上(要知道目前各种流行的页面处理技术ASP、PHP、JSP/Servlet还没有哪个能超过)。这并不是一种新技术，笔者在2000年第一次用过此技术。大家一定惊讶，既然有这种技术为什么我们还要编写这本参考手册，原因显而易见，虽然此技术已经产生自今，但中文资料还是少的可怜。好！废话到此为之止。<br /><br />==================<br />FastCGI的技术原理<br />==================<br />如果想了解FastCGI的技术原理就要了解何为"短生存期应用程序",何为"长生存期应用程序"。<br /><br />　　先从CGI技术开刀，以下是CGI技术的理论：每次当客户请求一个CGI的时候，Web服务器就请求操作系统生成一个新的CGI进程。当CGI满足要求后，服务器就杀死这个进程。服务器对客户端的每个请求都要重复这样的过程。<br />　　而FastCGI技术的理论为：FastCGI程序一旦产生后，他可以持续工作,足够满足客户的请求直到被明确的终止。如果你希望通过协同处理来提高程序的性能，你可以请求Web服务器运行多个FastCGI 应用程序的副本。<br /><br />CGI就是所谓的短生存期应用程序，FastCGI就是所谓的长生存期应用程序。<br /><br />由于FastCGI程序并不需要不断的产生新进程，可以大大降低服务器的压力。并且产生较高的应用效率。<br /><br />自今，较为流行的Java语言Servlet技术在设计上是以参考FastCGI的技术运行所设计。<br /><br />==============<br />FastCGI的特点<br />==============<br />1. 打破传统页面处理技术<br /><br />传统的页面处理技术，程序必须与Web服务器或Application服务器处于同一台服务器中。这种历史已经早N年被FastCGI技术所打破，FastCGI技术的应用程序可以被安装在服务器群中的任何一台服务器，而通过TCP/IP协议与Web服务器通讯，这样做既适合开发大型分布式 Web群，也适合高效数据库控制。<br /><br />2. 明确的请求模式<br /><br />CGI技术没有一个明确的角色，在FastCGI程序中，程序被赋予明确的角色（响应器角色、认证器角色、过滤器角色）。<br /><br />3. 合理的程序结构<br /><br />起初，真的很讨厌FastCGI应用程序的结构要求。没关系，您经过一段时间编写后就会喜欢这种结构，只有这种完全规范的结构才能让您的程序更有效率。<br /><br />===============================<br />FastCGI技术支持语言与Web服务器<br />===============================<br />在本手册中仅介绍如何用Perl语言来实现FastCGI技术。实际，只要符合FastCGI技术规范，都可以使用本技术。FastCGI技术目前支持语言有：C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。<br />FastCGI技术需要在Web服务器中安装支持部分才能运行，目前这部分已经完全支持：Apache、IIS、Pi3Web、Zeus等。<br /><br />1. Apache服务器安装方法<br /><br />Linux系统Apache：<br /><br />首先需要准备好一些安装包，如果您已经安装过Apache请参考以下步骤重新编译。<br /><br />Apache HTTP SERVER<br />在本文编写的时候，稳定版为apache.1.3.27。我们这里所使用的是源代码版http://apache.linuxforum.net/dist/httpd/apache_1.3.27.tar.gz<br />其他版或则这个地址有错误请到www.apache.org找相关版本。<br /><br />Mod_FastCGI<br />当前是2.3.0版！http://www.fastcgi.com/dist/mod_fastcgi.tar.gz<br />如果需要下载其他版或地址有错误请到www.fastcgi.com的Servers部分找到相关版本。<br /><br />好！安装包准备完毕，我们可以开始安装过程了。<br /><br />1.解压Apache安装包tar zxvf apache_1.3.27.tar.gz<br />2.解压mod_fastcgi.tar.gz包<br />3.将解压mod_fastcgi.tar.gz包后的目录复制到apache_1.3.27解压后目录的src/modules下并更名为fastcgi<br />4.使用Apache安装配置命令./configure --activate-module=src/modules/fastcgi/libfastcgi.a<br />5.执行make<br />6.执行make install<br />7.如过程没出现错误说明安装成功。请测试&lt;Apache安装后目录>/bin/httpd –l<br />8.如果列表中有mod_fastcgi.c表示成功！<br /><br />配置Apache的httpd.conf<br /><br />1.设置FastCGI文件的处理类型，请在httpd.conf包含Addhandler部分添加一句<br />AddHandler fastcgi-script .fcgi .fpl<br />这样，Apache就知道.fcgi与.fpl处理为fastcgi文件<br />2.还要为您的网站设置ScriptAlias解析，这个解析很容易，与普通CGI设置方式相同<br />ScriptAlias /fcgi-bin/ /usr/local/apache/fcgi-bin/<br />我这里这样设置后fcgi程序将安装在/usr/local/apache/fcgi-bin/下<br /><br />测试安装test.fcgi<br /><br />#!/usr/bin/perl<br />use FCGI;<br />my $count =0;<br />my $request = FCGI::Request();<br /><br />while($request->Accept() >= 0) {<br />　　　　print “Content-type: text/html\n\n”;<br />　　　　print $count++;<br />}<br /><br /><br />Win32系统Apache：<br /><br />准备安装包<br /><br />1.下载Apache for win32的版本，我们就下稳定版1.3.27<br />　 http://nagoya.apache.org/mirror/httpd/binaries/win32/apache_1.3.27-win32-x86-no_src.msi<br />2.下载ActivePerl<br />　 http:// hoowa .tab.net.cn/soft/ActivePerl-5.8.0.802-MSWin32-x86.msi<br /><br />配置Apache以支持http服务<br /><br />1.安装ActivePerl,最好安装到C盘，因为Apache 默认是在C下<br />2.安装Apache,装好后修改其目录下的conf文件夹下的httpd.conf文件<br />　寻找到ServerName。这里定义你的域名，如果前面有#，记得删除它。<br />　寻找到ServerAdmin。这里输入你的E-Mail地址。如果你仅仅是单机使用，改不改没什么关系<br />　在ServerName下面不远有个Options 和AllowOverride，将他们后面的参数去掉改为All,请注意大小写<br /><br />配置Apache以支持CGI<br /><br />1.假设Perl安装在C:\Perl目录,找到ScriptAlias /cgi-bin/ "C:/Apache/cgi-bin”（假设您将apache装在c盘下），那么C:/Apache/cgi-bin就是您存放cgi的目录<br />2.在ScriptAlias 这句下面,Options 和AllowOverride，将他们后面的参数去掉改为All<br />3.寻找到AddHandler cgi-script .cgi。删除前面的#，在后面加上 .pl<br /><br />注意：当您浏览cgi程序出现500错误的时候可以看一下您的程序，是不是以：#!C:\perl\bin\perl开有。<br /><br />配置Apache以支持Fastcgi<br /><br />1.下载mod_fastcgi-AP1.dll<br />http://www.fastcgi.com/dist/mod_fastcgi-AP1.dll<br />2.将.dll文件复制到../modules下，并修改httpd.conf文件，加入这两句<br />LoadModule fastcgi_module modules/mod_fastcgi-2.4.0-AP1.dll<br />AddHandler fastcgi-script .fcgi .fpl<br />3.保存后就可以运行fcgi程序了.<br /><br />注意：如果没有安装FCGI package,就在命令提示符下输入<br />ppm<br />search FCGI<br />INSTALL FCGI<br /><br />2.IIS服务器安装方法 （略）<br /><br />3.安装FCGI.pm模块<br /><br />在Linux系统中：<br /><br />　　登陆以下地址http://www.cpan.org/modules/by-module/FCGI/<br />　　下载最新版的FCGI（在本文编写的时候为）http://www.cpan.org/modules/by-module/FCGI/FCGI-0.67.tar.gz<br />　　解压tar zxvf FCGI-0.67.tar.gz<br />　　编译perl Makefile.PL<br />　　make<br />　　make install<br />　　完成！<br /><br />在Windows系统中，以及使用ActivePerl：<br /><br />　　进入MS-DOS模式或cmd环境<br />　　输入ppm命令<br />　　在ppm提示符下输入install FCGI<br />　　自动安装…..<br />　　完成<br /><br />===================<br />FastCGI的程序结构<br />===================<br />一个FastCGI的应用程序主要包含两部分：初始化部分、回应循环部分。<br /><br />#初始化编码<br />#开始回应循环<br />#回应内容<br />#回应结束循环<br /><br />#!/usr/bin/perl<br /><br />#以下内容都是初始化部分<br />use FCGI;<br />my $count =0;<br />my $request = FCGI::Request();<br /><br />#以下内容都是回应部分<br />while($request->Accept() >= 0) {<br />　　　　print “Content-type: text/html\n\n”;<br />　　　　print $count++;<br />}<br /><br />当应用程序被初始化后，初始编码仅仅只运行一次。初始编码就像开启数据库和编译后的应用程序一样常常是十分耗时的操作。<br />整个回应部分循环始复，直到客户要求终止。回应循环部分从调用FCGI_Accept开始。FCGI_Accept程序执行后会挂启程序(程序循环部分虽在内存中，但是并不运行)，除非客户对FastCGI应用程序发出请求。客户的请求一旦到达程序，FCGI_Accept会运行回应部分的内容一次，然后再次中止程序，等待客户下一个请求的到来。整个回应循环部分只会在系统管理员或者Web服务器杀死了FastCGI应用程序后才能消除。<br /><br />====================<br />FastCGI应用程序举例<br />====================<br />1.一个典型的FastCGI应用程序，这个程序将在初始化部分初始变量$count为0，每次请求运行都将累加一。<br /><br />#!/usr/bin/perl<br />use FCGI;<br />use strict;<br /><br />my $count = 0;<br />my $request = FCGI::Request;<br /><br />while($request->Accept >=0){<br />　　　　$count++;<br />　　　　print “Content-type: text/html\n\n”;<br />　　　　print qq~<br />&lt;HTML><br />&lt;HEAD><br />&lt;TITLE>FastCGI&lt;/TITLE><br />&lt;/HEAD><br />&lt;BODY>请求已发生次数：$count<br />&lt;/BODY><br />&lt;/HTML>~;<br />}<br /><br />2.FastCGI程序为长生存期应用程序，如在设计中有缺陷会产生内存溢出问题，对服务器造成安全隐患。且这种溢出是不可预见性。本程序初始化了一个控制变量，一旦用户请求次数达到预先设置的数量程序结束，下一次请求将重新初始化。<br /><br />#!/usr/bin/perl<br />use FCGI;<br />use strict;<br /><br />my $count = 0;<br />my $request = FCGI::Request;<br />my $session_life = 1000;<br /><br />while($request->Accept >=0){<br />　　　　$count++;<br />　　　　print “Content-type: text/html\n\n”;<br />　　　　print qq~<br />&lt;HTML><br />&lt;HEAD><br />&lt;TITLE>FastCGI&lt;/TITLE><br />&lt;/HEAD><br />&lt;BODY>请求已发生次数：$count<br />&lt;/BODY><br />&lt;/HTML>~;<br /><br />if ($count>$session_life) {<br />　　　　end;<br />}<br />}<br /><br />======================<br />书写FastCGI的规范要求<br />======================<br />FastCGI应用程序对编写者提出了一种严格要求的挑战。<br /><br />1.在程序头必须加载strict模块。格式为use strict;<br />2.任何变量的使用之前一定不要忘记声明变量my $variable;<br />3.不要将一些初始化的内容放在回应部分，这样不仅无法提高效率还会降低效率。例如对数据库的连接部分。<br />4.同样，也不要把什么东西都放在初始化部分。<br />5.在程序调试后发现有BUG或修改，请先直接修改程序。然后杀死系统中的程序进程，要不你的修改永远不被执行。如果杀不好，就重启Apache吧。<br /><br />==================<br />FCGI.pm模块的使用<br />==================<br />模块名称：Fast CGI Module<br />使用格式：<br /><br />use FCGI;<br />$request = FCGI::Request();<br />while($request->Accept() >=0) {<br />#CGI Process..<br />}<br /><br /><br />FCGI支持的使用方法：<br /><br />FCGI::Request<br />$request = FCGI::Request(<br />$input_fh,<br />$output_fh,<br />$error_fh,<br />fileno($socket),<br />);<br />$input_fh,$output_fh,$error_fh是设置input/output/error的句柄，默认情况下分别是STDIN、STDOUT、STDERR<br /><br />$socket的用处在分离FastCGI应用程序与Web服务器的情况下才需要使用。它允许程序通过设置的套接字与Web服务器通讯。<br /><br />FCGI::OpenSocket(path, backlog)<br />在程序中创建一个套接字，在建立独立的FastCGI应用程序中用到。<br />FCGI::CloseSocket(socket)<br />关闭打开的FCGI::OpenSocket。<br />$request->Accept<br />当有新的请求产生，以上句子返回0,其他情况下返回-1。<br />$request->Attach<br />重新设置文件句柄连接到相关服务器上。<br />$request->Detach<br />临时分离文件句柄。<br />$request->Finish<br />结束当前请求，这本来由Accept来自动完成，但有写程序中在返回给客户请求后可能需要做一些其他工作，比如操作数据库。<br />$request->Flush<br />清洗当前连接中的所有输入输出。<br />$env = $req->GetEnvironment()<br />返回来环境变量。<br />($in, $out, $err) = $req->GetHandles()<br />返回标准文件句柄。<br />$isfcgi = $req->IsFastCGI()<br />返回当前程序运行的状态是否FastCGI。<br /><br />========================<br />FastCGI的效率与应用范围<br />========================<br />效率这个词不仅仅一词出现过。我也不仅一次讲解过效率的由来。<br />现在所有的解释性语言(Perl、Java、Python)的运行效率，都要比编译形语言(ANSI C)慢的多(一到几十倍)。但奇怪的是，大家似乎看到的是Jsp/Servlet不错的效率。这是因为在网络世界中，对效率的影响不在语言的本身，而在以下几个方面：1、技术模型 2、系统I/O带宽 3、程序设计。<br />FastCGI是一种半成熟(这样说是因为C语言成熟用了十多年，自今Java语言与C++语言都是不断在完善中)的技术，它经过多年的应用实践已经获得广泛的支持。<br />FastCGI技术适合各种程序设计上的要求，我们建议使用在以下要求中：<br />1.想使用J2EE以外的一种高效率OpenSource技术。<br />2.分布式数据库控制系统<br />3.高访问量页面访问系统<br />4.性能评测<br />5.混毕业设计<br /><br />==============<br />FastCGI的资源<br />==============<br />FastCGI技术官方网站：http://www.fastcgi.com<br />FastCGI中文讨论组：http://www.ilcatperl.org<br />中国Perl组织：http://www.perlchina.org<br />FastCGI技术案例：<br />http://www.hotmail.com<br />http://www.yahoo.com<br />http://www.donews.com<br /><br />======<br />声明<br />======<br />本文作者： hoowa .sun<br />感谢：royce(部分内容是他编写的)、bloves(找到很多Bug)<br />获得方法：http://www.ilcatperl.org<br />任何网站(非赢利性)转载无需经过作者同意，请保留任何版权声明。<br />未经作者同意禁止任何杂志转载。<br />=========================<br />文章类型:转载 提交:Aoming 核查:NetDemon
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/223741#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 04 Aug 2008 09:04:57 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/223741</link>
        <guid>http://googledave.javaeye.com/blog/223741</guid>
      </item>
      <item>
        <title>改变数据库编码</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/222068" style="color:red;">http://googledave.javaeye.com/blog/222068</a>&nbsp;
          发表时间: 2008年07月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如果要改变整个mysql的编码格式：<br />启动mysql的时候，mysqld_safe命令行加入<br />–default-character-set=utf8<br /><br />在mysql提示符后输入命令<br />alter database db_name default character set utf8;
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/222068#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Thu, 31 Jul 2008 10:05:24 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/222068</link>
        <guid>http://googledave.javaeye.com/blog/222068</guid>
      </item>
      <item>
        <title>多选列表</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/214492" style="color:red;">http://googledave.javaeye.com/blog/214492</a>&nbsp;
          发表时间: 2008年07月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;%= select_tag 'categories[]',<br />options_for_select( @categories ), { :multiple => true,<br />:size => 15,<br />:style => "width:250px" }<br />%><br /><br />格外留意：<br />:multiple => true, 这个是多选<br />categories[]这个一定要是数组或者Hash<br /><br />补充个参数<br />eg.<br />&lt;%= select_tag 'category',<br />           options_for_select(@select_category,77),<br />           { :default => true}%><br /><br />这样就有默认值了，77是hash里的值<br />比如controller里这么写～<br />     @select_category = {}<br />      @select_category.store("",77)
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/214492#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jul 2008 10:35:42 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/214492</link>
        <guid>http://googledave.javaeye.com/blog/214492</guid>
      </item>
      <item>
        <title>软连接</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/214342" style="color:red;">http://googledave.javaeye.com/blog/214342</a>&nbsp;
          发表时间: 2008年07月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          建立软链接：<br />ln -s 要链接的文件 链接后的文件名<br /><br />说明：<br />硬连接就像一个文件有多个文件名，<br />软连接就是产生一个新文件，这个文件指向另一个文件的位置，<br />硬连接必须在同一文件系统中，而软连接可以跨文件系统.<br /><br />删除软链接：不影响源文件<br />rm -i 连接后的文件名<br /><br /><br />说明：<br />ln 建立链接<br />ln [option] source_file dist_file<br />-f 建立时，将同档案名删除.<br />-i 删除前进行询问.<br />ln -s abc cde 建立abc 的软连接<br />ln abc cde 建立abc的硬连接
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/214342#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</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, 13 Jul 2008 14:42:53 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/214342</link>
        <guid>http://googledave.javaeye.com/blog/214342</guid>
      </item>
      <item>
        <title>validate</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/213918" style="color:red;">http://googledave.javaeye.com/blog/213918</a>&nbsp;
          发表时间: 2008年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Ruby on Rails 的检验方法(Validation Helpers)大全<br />可以自定义validate(), 这个方法在每次保存数据时都会被调用.<br />如:<br />def validate<br />if name.blank? && email.blank?<br /> errors.add_to_base("You mustspecify a name or an email address")<br />end<br />end<br />同时也可以自定义 validate_on_create(),validate_on_update()方法.<br />valid?()方法可以随时调用,用来测试数据是否能通过校验<br />返回的错误信息可用 error_messages_for(model)方法显示.<br />如:&lt;%= error_messages_for 'article' %><br /><br />校验大全:<br />validates_acceptance_of<br />指定checkbox应该选中. (如:(*)我同意条款)<br />用法:validates_acceptance_of attr... [ options...]<br />参数:message text 默认:“mustbe accepted.”<br /> :on :save,:create, or :update<br />实例:<br />class Order &lt; ActiveRecord::Base<br /> validates_acceptance_of:terms,<br />     :message=> "Please accept the terms to proceed"<br />end<br />validates_associated<br />查验指定的object.<br />用法:validates_associated name... [ options...]<br />参数:message text 默认: is “is invalid.”<br /> :on :save,:create, or :update<br />实例:<br />class Order &lt; ActiveRecord::Base<br /> has_many :line_items<br /> belongs_to :user<br /> validates_associated:line_items,<br />    :message=> "are messed up"<br /> validates_associated:user<br />end<br />validates_confirmation_of<br />数据重校<br />用法:validates_confirmation_of attr... [options... ]<br />参数:message text 默认 “doesn’t matchconfirmation.”<br /> :on :save,:create, or :update<br />实例:<br />对密码表:<br />&lt;%= password_field "user", "password"%>&lt;br /><br />&lt;%= password_field "user","password_confirmation" %>&lt;br /><br />#第二表名为xxxx_confirmation<br />class User &lt; ActiveRecord::Base<br /> validates_confirmation_of:password<br />end<br />validates_each<br />使用block检验一个或一个以上参数.<br />用法:validates_each attr... [ options... ] {|model, attr, value| ... }<br />参数:allow_nilboolean 设为true时跳过nil对象.<br /> :on :save,:create, or :update<br />实例:<br />class User &lt; ActiveRecord::Base<br /> validates_each :name, :email do|model, attr, value|<br /> ifvalue =~ /groucho|harpo|chico/i<br />  model.errors.add(attr,"Youcan't be serious, #{value}")<br /> end<br /> end<br />end<br />validates_exclusion_of<br />确定被检对象不包括指定数据<br />用法:validates_exclusion_of attr..., :in =>enum [ options... ]<br />#enum指一切可用include?()判断的范围.<br />参数:allow_nil 设为true将直接跳过nil对象.<br /> :in (or:within) enumerable<br /> :message text默认为: “is not included in the list.”<br /> :on :save,:create, or :update<br />实例:<br />class User &lt; ActiveRecord::Base<br /> validates_exclusion_of:genre,<br />    :in=> %w{ polka twostep foxtrot },<br />    :message=>"no wild music allowed"<br /> validates_exclusion_of:age,<br />     :in=> 13..19,<br />     :message=>"cannot be a teenager"<br />end<br />validates_inclusion_of<br />确认对象包括在指定范围<br />用法:validates_inclusion_of attr..., :in =>enum [ options... ]<br />参数:allow_nil 设为true直接跳过nil对象<br /> :in (or:within) enumerable An enumerable object.<br /> :message text默认:“is not included in the list.”<br /> :on :save,:create, or :update<br />实例:<br />class User &lt; ActiveRecord::Base<br /> validates_inclusion_of:gender,<br />    :in=> %w{ male female },<br />    :message=>"should be 'male' or 'female'"<br /> validates_inclusion_of:age,<br />    :in=> 0..130,<br />    :message=>"should be between 0 and 130"<br />end<br />validates_format_of<br />用正则检验对象<br />用法:validates_format_of attr..., :with =>regexp [ options... ]<br />参数:message text 默认为: “is invalid.”<br /> :on :save,:create, or :update<br /> :with正则表达式<br />实例:<br />class User &lt; ActiveRecord::Base<br /> validates_format_of :length,:with => /^\d+(in|cm)/<br />end<br />validates_length_of<br />检查对象长度<br />用法:validates_length_of attr..., [ options...]<br />参数:in (or :within) range<br /> :isinteger<br /> :minimuminteger<br /> :maximuminteger<br /> :message text默认文字会根据参数变动,可使用%d取代确定的最大,最小或指定数据.<br /> :on :save,:create, or :update<br /> :too_longtext 当使用了 :maximum后的 :message<br /> :too_shorttext ( :minimum )<br /> :wrong_length( :is)<br />实例:<br />class User &lt; ActiveRecord::Base<br /> validates_length_of :name,:maximum => 50<br /> validates_length_of :password,:in => 6..20<br /> validates_length_of :address,:minimum => 10,<br />      :message=>"seems too short"<br />end<br />validates_numericality_of<br />检验对象是否为数值<br />用法:validates_numericality_of attr... [options... ]<br />参数:message text 默认 “is not a number.”<br /> :on :save,:create, or :update<br /> :only_integer<br />实例:<br />class User &lt; ActiveRecord::Base<br /> validates_numericality_of:height_in_meters<br /> validates_numericality_of :age,:only_integer => true<br />end<br />validates_presence_of<br />检验对象是否为空<br />用法:validates_presence_of attr... [ options...]<br />参数:message text 默认:“can’t be empty.”<br /> :on :save,:create, or :update<br />实例:<br />class User &lt; ActiveRecord::Base<br /> validates_presence_of :name,:address<br />end<br />validates_uniqueness_of<br />检验对象是否不重复<br />用法:validates_uniqueness_of attr... [ options...]<br />参数:message text 默认: “has already beentaken.”<br /> :on :save,:create, or :update<br /> :scope attr指定范围<br />实例:<br />class User &lt; ActiveRecord::Base<br /> validates_uniqueness_of:name<br />end<br />class User &lt; ActiveRecord::Base<br /> validates_uniqueness_of :name,:scope =>"group_id"<br />end<br />#指定在同一group_id的条件下不重复.<br /><br />常用正则:<br /><br />E-Mail地址格式:<br />validates_format_of  :email,<br />        :with  => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,<br />        :message => 'email must be valid'<br /><br />网址格式:<br />validates_uri_existence_of :url, :with =><br />   /(^$)|(^(http|https)://[a-z0-9] ([-.]{1}[a-z0-9])*.[a-z]{2,5}(([0-9]{1,5})?/.*)?$)/ix
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/213918#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Fri, 11 Jul 2008 14:17:43 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/213918</link>
        <guid>http://googledave.javaeye.com/blog/213918</guid>
      </item>
      <item>
        <title>利用Rails的Rake管理MySQL数据库</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/212606" style="color:red;">http://googledave.javaeye.com/blog/212606</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一、使用Migrations管理数据表<br /><br />　　在Rails中，当创建一个叫contact的model时，同时一个名为contacts的数据表将会被创建。因此，对数据表contacts的操作可以转换成对模型contact操作，可以访问它的属性。而很多的新手习惯使用一些框架什么的来操作数据表，其实，可以通过Rails本身提供的功能就可以操作数据表了。这样的功能就是Migrations功能。<br /><br />　　多数Rails开发者使用Migrations迁移的基本功能来创建和管理数据库。数据迁移功能让你可以使用Ruby语言来管理数据库方案，可以充分利用一些Ruby所特有的工具，诸如Rake，来根据Ruby脚本提供的指令来更新数据库。还有，数据迁移功能还具有一个内置的版本控制功能，可以像在Subversion或CVS中那样对所做的修改进行前后的回滚。听起来是不是很具有诱惑力呢?<br /><br />　　Migrations有点像活动记录(Active Record，一个对象，它包装数据库表或视图中的某一行，封装数据库访问，并在这些数据上增加了领域逻辑)，可以通过Migrations进行程序形式的管理数据表，即可以创建、修改、删除表格，而且语法很简单。更重要的是，Migrations提供了一个构建的控制器。<br /><br />　　事实上，当在Rails下创建一个新的model时，会自动的创建Migration文件。例如，创建一个contact模型时，在项目的db目录下，即可发现一个名为001_create_contacts.rb的文件，其内容如下所示：<br /><br />　　class CreateContacts &lt; ActiveRecord::Migration<br /><br />　　def self.up<br /><br />　　create_table :contacts do |t|<br /><br />　　end<br /><br />　　end<br /><br />　　def self.down<br /><br />　　drop_table :contacts<br /><br />　　end<br /><br />　　end<br /><br />　　如果想要创建数据表，可以把以上内容修改成如下内容：<br /><br />　　class CreateContacts &lt; ActiveRecord::Migration<br /><br />　　def self.up<br /><br />　　create_table :contacts do |t|<br /><br />　　t.column :name, :string, :null => false<br /><br />　　t.column :email, :string<br /><br />　　t.column :phone, :string, :limit => 10, :null => false<br /><br />　　end<br /><br />　　end<br /><br />　　def self.down<br /><br />　　drop_table :contacts<br /><br />　　end<br /><br />　　end<br /><br />　　现在可以使用Migration功能了，在项目的目录下运行如下的Rake命令：<br /><br />　　%>rake db:migrate<br /><br />　　现在登陆MySQL数据库中，可以看到，contacts表已经创建好了。那么，如果想撤消刚才的创建要怎么办呢?要回滚上面的操作可以使用VERSINO选项。因为数据移植功能的工作原理与版本控制工具很相似，你可以将数据库回滚到一个早期的版本。版本号是由数据移植脚本所提供的数字来确认的：<br /><br />　　%>rake db:migrate VERSION=0<br /><br />　　再次登陆MySQL数据库，可以看到contacts表已经删除掉了。此外，如果想进行其它一些更加复杂的操作时，自然而然想到通过创建另一个migrations。例如，想另外创建一张表，或修改字段的数据类型等。可能在项目的目录下运行如下的代码来创建一个新的migration文件：<br /><br />　　%>ruby script/generate migration your_desired_migration_name<br />　　<br />　　二、从Fixture中加载数据<br /><br />　　在创建一个应用程序时，我们往往遇到这样的情况，手边已经有了一些数据，需要将这些现成的数据融合到应用程序的数据库中去。例如，在进行客户的结帐时，往往需要询问客户，以确定他们居住在哪个州。因为州名可能在程序中很多地方使用到，于是就有必要创建一个名为state的model。但这里又不想手工的创建这样的表格，因为这样做不只是很烦琐，更重要的是可能导致错误。<br /><br />　　这个时候，就可以使用fixtures这一功能了。它最初的目的，是为了在进行程序测试时，简化从示例数据向测试数据的转换工作。Fixture是包含运行测试时使用数据的文件。但是，稍微加工一下，我们也可使用它们在migration迁移期间来加载数据。<br /><br />　　但后来的事实证明，这是一种很不错的方法，可以使用种子数据生成测试的Model，例如前面所提到的州名。所需要做的工作就是把数据按照fixtures的格式进行组织，这里的格式要求有两点：YAML(YAML Ain't Markup Language，这是一种数据序列化(serialization)语言，是一种可读的文本的数据结构，它的设计目标是使人们容易读，程序容易处理。它类似XML，但是比XML简单)及comma-separated(逗号分隔)。<br /><br />　　下面将展示如何通过逗号分隔的fixture文件，用于保存州名，并且使用Rake来生成包含这些数据的数据表。这是假定读者已经创建了state model及migration文件，接下来生成数据表。<br /><br />　　首先，请记住Rails的编辑习惯，因此这里应该在项目的test/fixtures目录下创建我们的fixtures，因为这些数据最主要的用途还是用来进行测试。当然了，在项目的db目录下面还可以创建seed目录，用于存放种子数据。<br /><br />　　然后，创建state.csv文件，并存放在db/seed目录下面。该文件的内容如下：<br /><br />　　id, name, abbreviation<br /><br />　　1, Alabama, AL<br /><br />　　2, Alaska, AK<br /><br />　　3, Arizona, AZ<br /><br />　　4, Arkansas, AR<br /><br />　　5, California, CA<br /><br />　　6, Colorado, CO<br /><br />　　接下来，需要创建一个Rake文件，至于这一点，要想完全讲清楚，没有一篇比较长的文章很难。因此在这里不进行具体的解释，只列出步骤。创建seeder.task文件，并将它存放在项目的lib/tasks目录下面，该文件的内容如下所示：<br /><br />　　namespace :db do<br /><br />　　desc "Load seed fixtures (from db/seed) into the current<br /><br />　　environment's database."<br /><br />　　task :seed => :environment do<br /><br />　　require 'active_record/fixtures'<br /><br />　　Dir.glob(RAILS_ROOT + '/db/fixtures/*.csv').each do |file|<br /><br />　　Fixtures.create_fixtures('db/seed',<br /><br />　　File.basename(file, '.*'))<br /><br />　　end<br /><br />　　end<br /><br />　　end<br /><br />　　为了生成states数据表，需要在项目的目录下执行如下的命令：<br /><br />　　%>rake db:seeder<br /><br />　　登陆MySQL数据库服务器，检查数据库，表已经创建好了。<br /><br />　　三、在数据库之间迁移数据<br /><br />　　Rails的开发者Tobias Lutke遇到了数据迁移的问题，他采用Rake任务将数据库中的数据生成YAML格式的文件，再通过Rails的Migrations功能来生成其它数据库(包括MySQL、SQLite、SQL Server以及Oracle)。在这里，不列出具体的代码，因为很长，只列出一些关键的命令就可以了。<br /><br />　　执行下面的命令，把数据库中的数据生成YAML格式：<br /><br />　　%>rake db:backup:write<br /><br />　　于是，数据库中的所有表都备份到了db/backup目录中了。接下来要做的就是修改database.yml文件，以指向接收数据的数据库。并运行如下的命令：<br /><br />　　%>rake db:backup:write<br /><br />　　四、小结<br /><br />　　作为一个Rails开发者，你可能熟练得运用“rake”运行你的测试，或者你利用“rake db：migrate”运行你的数据迁移任务(migration)。但是，你是否真正明白在那些Rake任务的背后发生了什么吗?你是否意识到，你可以编写属于你的任务，或者创建好用的属于你的Rake库文件?<br /><br />　　本文只是介绍了Rails的数据管理功能的冰山一角，事实上，它不仅支持MySQL，还支持目前市面上的大多数数据库，诸如SQLite、PostgreSQL、SQL Server和Oracle。如果读者想了解更多这个精彩工具的功能，可以去查看Rails的官方站点的migrations documentation(http://api.rubyonrails.org/classes/ActiveRecord/Migration.html)。
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/212606#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 09:53:14 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/212606</link>
        <guid>http://googledave.javaeye.com/blog/212606</guid>
      </item>
      <item>
        <title>layout的用法</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/211633" style="color:red;">http://googledave.javaeye.com/blog/211633</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一般来说layout有如下五种：<br />gobal layout，controller layout，shared layout，dynamic layout，action layout<br /><br />假设我们有一个views/projects/index.rhtml页面:<br />代码<br /><br />   1. &lt;h2>Projects&lt;/h2>  <br />   2. &lt;ul>  <br />   3. &lt;% for project in @projects %>  <br />   4.   &lt;li>&lt;%= project.name %>&lt;/li>  <br />   5. &lt;% end %>  <br />   6. &lt;/ul>  <br /><br /><br />下面来看看各种layout的用法。<br /><br />1，global layout<br />添加views/layouts/application.rhtml:<br />代码<br /><br />   1. &lt;h1>Application Layout!&lt;/h1>  <br />   2. &lt;%= yield %>  <br /><br /><br />在layouts目录下添加application.rhtml即可，&lt;%= yield %>即输出我们的projects/index.rhtml页面<br />由于我们的controller都继承自ApplicationController，所以application.rhtml会先解析<br /><br />2，controller layout<br />添加views/layouts/projects.rhtml:<br />代码<br /><br />   1. &lt;h1>Projects Layout!&lt;/h1>  <br />   2. &lt;%= yield %>  <br /><br /><br />道理同上，ProjectsController当然会使用同名的projects.rhtml作layout了<br />注意的是controller layout会覆盖global layout<br /><br />3，shared layout<br />添加views/layouts/admin.rhtml:<br />代码<br /><br />   1. &lt;h1>Admin Layout!&lt;/h1>  <br />   2. &lt;%= yield %>  <br /><br /><br />我们建立了admin layout，然后在需要使用该layout的controller中指定即可:<br />代码<br /><br />   1. class ProjectsController &lt; ApplicationController  <br />   2.   layout "admin"  <br />   3.   <br />   4.   def index   <br />   5.     @projects = Project.find(:all)  <br />   6.   end  <br />   7. end  <br /><br />4，dynamic layout<br />有时候我们需要根据不同的用户角色来使用不同的layout，比如管理员和一般用户，比如博客换肤(也可以用更高级的theme-generator)<br />代码<br /><br />   1. class ProjectsController &lt;　ApplicationController  <br />   2.   layout :user_layout  <br />   3.   <br />   4.   def index  <br />   5.     @projects = Project.find(:all)  <br />   6.   end  <br />   7.   <br />   8.   protected  <br />   9.   <br />  10.   def user_layout  <br />  11.     if current_user.admin?  <br />  12.       "admin"  <br />  13.     else  <br />  14.       "application"  <br />  15.     end  <br />  16.   end  <br />  17. end  <br /><br />5，action layout<br />在action中指定layout即可:<br />代码<br /><br />   1. class ProjectsController &lt;　ApplicationController  <br />   2.   layout :user_layout  <br />   3.   <br />   4.   def index  <br />   5.     @projects = Project.find(:all)  <br />   6.     render :layout => 'projects'  <br />   7.   end  <br />   8.   <br />   9.   protected  <br />  10.   <br />  11.   def user_layout  <br />  12.     if current_user.admin?  <br />  13.       "admin"  <br />  14.     else  <br />  15.       "application"  <br />  16.     end  <br />  17.   end  <br />  18. end  <br /><br /><br />上面的index方法指定使用projects layout，当然我们也可以指定不使用layout，如printable页面:<br />代码<br /><br />   1. def index  <br />   2.   @projects = Project.find(:all)  <br />   3.   render :layout => false  <br />   4. end  <br /><br />需要注意的是，这5种layout会按顺序后面的覆盖前面的layout
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/211633#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 16:30:18 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/211633</link>
        <guid>http://googledave.javaeye.com/blog/211633</guid>
      </item>
      <item>
        <title>多表联动</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/211571" style="color:red;">http://googledave.javaeye.com/blog/211571</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          test.rhtml的代码：<br />&lt;%= javascript_include_tag :defaults %><br />&lt;%= select(:city, :province_id, @provinces, {},<br /> {"onchange" => remote_function(<br />  :with => "'province_id='+value",<br />  :update => 'city_select',<br />  :url => { :action => :select_cities_with_ajax })})<br />%><br /><br />&lt;div id='city_select'><br />&lt;%= select( :county, :city_id, @cities, options = {},<br /> html_options = { "onchange" => remote_function(<br />  :with => "'city_id='+value",<br />  :update => 'county_select',<br />  :url => { :action => :select_counties_with_ajax })})<br />%><br />&lt;/div><br />&lt;div id='county_select'>&lt;%= select(:sth, :county_id, @counties) %>&lt;/div><br /><br />_select_city.rhtml代码：<br />&lt;%= select(:county, :city_id, @cities, {},<br /> {"onchange" => remote_function(<br />  :with => "'city_id='+value",<br />  :update => 'county_select',<br />  :url => { :action => :select_county_with_ajax } )} )<br />%><br /><br />_select_county.rhtml代码：<br />&lt;%= select(:sth, :county_id, @sights) %><br /><br />controller代码：<br />def select_city_with_ajax<br /> @cities = Province.find(params[:province_id]).cities.map{|u| [u.name,u.id]}<br /> render :partial => "select_city"<br />end<br /><br />def select_county_with_ajax<br /> @counties = City.find(params[:city_id]).counties.map{|u| [u.name,u.id]}<br /> render :partial => "select_county"<br />end
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/211571#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 15:16:03 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/211571</link>
        <guid>http://googledave.javaeye.com/blog/211571</guid>
      </item>
      <item>
        <title>mysql</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/210247" style="color:red;">http://googledave.javaeye.com/blog/210247</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          复制整个表   <br />create   table   new_table   select   *   from   old_table;   <br />复制,不复制数据   <br />create   table   new_table   select   *   from   old_table   where   0;<br /><br />登陆以后运行以下命令，给予远程访问客户端权限.. <br /><br />grant all on *.* to 'remote'@'172.16.21.39' identified by 'password';<br /><br />remote表示用户名.<br /><br />'172.16.21.39' 远程ip地址<br /><br />password表示远程登陆密码.<br /><br /><br />创建utf8数据库<br />   1. CREATE DATABASE IF NOT EXISTS dbname default charset utf8 COLLATE utf8_general_ci;  <br />   2.   <br />   3. 其中 COLLATE utf8_general_ci 似乎是按照 utf8 编码排序  <br />   4.   <br />   5. 或者写成  <br />   6.   <br />   7. CREATE DATABASE dbname default charset utf8;
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/210247#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jul 2008 18:14:07 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/210247</link>
        <guid>http://googledave.javaeye.com/blog/210247</guid>
      </item>
      <item>
        <title>rar解压</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/209211" style="color:red;">http://googledave.javaeye.com/blog/209211</a>&nbsp;
          发表时间: 2008年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          很简单，只需要<br />sudo apt-get install rar unrar<br />rar使用来创建rar格式的眼所文件的<br />unrar是用来解压的<br />unrar 一般是配合 e， x参数的来使用<br />  e             Extract files to current directory（解压到当前目录）<br /><br />  x             Extract files with full path()(按照压缩包里边的的路径解压)<br />例子<br />cd 要解压的地方<br />unrar e  /home/dave/software/aa.rar  <br />unrar x /home/dave/software/aa.rar
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/209211#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</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, 29 Jun 2008 14:03:57 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/209211</link>
        <guid>http://googledave.javaeye.com/blog/209211</guid>
      </item>
      <item>
        <title>subversion</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/209166" style="color:red;">http://googledave.javaeye.com/blog/209166</a>&nbsp;
          发表时间: 2008年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          sudo apt-get install sunversion<br />sudo mkdir /home/svn<br />cd /home/svn<br />svnadmin create tianyou<br />cd tianyou<br />cd /home/dave<br />rails ty<br />cd ty<br />svn import -m "initial import" . file:///home/svn/tianyou<br />cd ..<br />rm -rf ty<br />svn checkout file:///home/svn/tianyou<br />cd tianyou<br />#启动<br />/etc/init.d/restart<br />svn remove log/*<br />svn commit -m 'removed log files'<br />svn propset svn:ignore "*.log" log/<br />svn update log/<br />svn commit -m 'svn ignore new log/*.log files'<br />svn move config/database.yml config/database.orig<br />svn commit -m 'move database.yml to database.orig'<br />svn propset svn:ignore "database.yml" config/<br />svn update config/<br />svn commit -m 'Ignoring database.yml'
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/209166#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 29 Jun 2008 11:01:49 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/209166</link>
        <guid>http://googledave.javaeye.com/blog/209166</guid>
      </item>
      <item>
        <title>ubuntu路由设置</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/209163" style="color:red;">http://googledave.javaeye.com/blog/209163</a>&nbsp;
          发表时间: 2008年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我在某台机子安装Ubuntu Server时，安装过程跳过了网络配置的步骤，回头在另一台机子SSH登录这台机子的时候始终不能连接，通过路由器DHCP Client Table列表中查看发现安装Ubuntu Server的这台机子并未加入网络，很是奇怪。于是在这台机子上执行命令：<br />$ifconfig<br />返回结果中只有lo，没有eth0，这才联想到可能和安装时跳过网络配置有关，只需要简单配置一下即可让这台机子正常加入网络。<br />$sudo pico /etc/network/interfaces<br />这就会启动简单文本编辑器来编辑Linux网络配置文件<br />在这里你应该会看到如下内容：<br /><br />    auth lo<br />    iface lo inet loopback<br /><br /><br />这个正是lo回环，我需要让这台运行Ubuntu Server的机子通过DHCP获得IP来加入网络，那么我只需要在上面的lo回环的配置内容下面加入：<br /><br />    auth eth0<br />    iface eth0 inet dhcp<br /><br /><br />按下Ctrl+O组合键即可保存，按下Ctrl+X退出。<br />让网络配置文件生效有两个办法：<br />1、重启Ubuntu：<br />$sudo reboot<br />2、重启网络组件：<br />$sudo /etc/init.d/networkding restart<br />只要显示Reconfiguring network interfaces... [OK]<br />即成功重启网络组件。<br />如果并不是通过DHCP来获得IP而是需要手动指定IP（比如192.168.1.1）并且指定网关（如192.168.1.254），那么如此配置：<br /><br />    auth eth0<br />    iface eth0 inet static<br />    address 192.168.1.1<br />    netmask 255.255.255.0<br />    gateway 192.168.1.254<br /><br /><br /><br />如果是手动指定IP并且还需要访问互联网，比如wget下载，那么还需要设置DNS：<br />$sudo pico /etc/resolv.conf<br />向这里添加配置内容：<br />nameserver xxx.xxx.xxx.xxx<br />保存即可。<br /><br /><br /><br />图形界面有时候配置网络不能生效，可以用命令行配置<br /><br />IP命令行配置如下<br /><br />sudo gedit /etc/network/interfaces<br /><br />DHCP<br /><br />DHCP配置如下（假设通过eth1上网）<br /><br /># The primary network interface - use DHCP to find our address<br /><br />auto eth1<br /><br />iface eth1 inet dhcp //指定为dhcp<br /><br />然后重启<br /><br />sudo /etc/init.d/networking restart<br /><br />Static IP<br /><br />静态IP地址配置如下(假设通过eth1上网)<br /><br /># The primary network interface<br /><br />auto eth1<br /><br />iface eth1 inet static //指定为static<br /><br />address 192.168.3.90 //IP地址<br /><br />gateway 192.168.3.1 //网关<br /><br />netmask 255.255.255.0 //子网掩码<br /><br />同样需要重启<br /><br />sudo /etc/init.d/networking restart<br /><br />DNS<br /><br />如果有必要，配置DNS<br /><br />sudo gedit /etc/resolv.conf<br /><br />nameserver 192.168.3.2
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/209163#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 29 Jun 2008 10:38:13 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/209163</link>
        <guid>http://googledave.javaeye.com/blog/209163</guid>
      </item>
      <item>
        <title>ubuntu路由设置</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/209162" style="color:red;">http://googledave.javaeye.com/blog/209162</a>&nbsp;
          发表时间: 2008年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我在某台机子安装Ubuntu Server时，安装过程跳过了网络配置的步骤，回头在另一台机子SSH登录这台机子的时候始终不能连接，通过路由器DHCP Client Table列表中查看发现安装Ubuntu Server的这台机子并未加入网络，很是奇怪。于是在这台机子上执行命令：<br />$ifconfig<br />返回结果中只有lo，没有eth0，这才联想到可能和安装时跳过网络配置有关，只需要简单配置一下即可让这台机子正常加入网络。<br />$sudo pico /etc/network/interfaces<br />这就会启动简单文本编辑器来编辑Linux网络配置文件<br />在这里你应该会看到如下内容：<br /><br />    auth lo<br />    iface lo inet loopback<br /><br /><br />这个正是lo回环，我需要让这台运行Ubuntu Server的机子通过DHCP获得IP来加入网络，那么我只需要在上面的lo回环的配置内容下面加入：<br /><br />    auth eth0<br />    iface eth0 inet dhcp<br /><br /><br />按下Ctrl+O组合键即可保存，按下Ctrl+X退出。<br />让网络配置文件生效有两个办法：<br />1、重启Ubuntu：<br />$sudo reboot<br />2、重启网络组件：<br />$sudo /etc/init.d/networkding restart<br />只要显示Reconfiguring network interfaces... [OK]<br />即成功重启网络组件。<br />如果并不是通过DHCP来获得IP而是需要手动指定IP（比如192.168.1.1）并且指定网关（如192.168.1.254），那么如此配置：<br /><br />    auth eth0<br />    iface eth0 inet static<br />    address 192.168.1.1<br />    netmask 255.255.255.0<br />    gateway 192.168.1.254<br /><br /><br /><br />如果是手动指定IP并且还需要访问互联网，比如wget下载，那么还需要设置DNS：<br />$sudo pico /etc/resolv.conf<br />向这里添加配置内容：<br />nameserver xxx.xxx.xxx.xxx<br />保存即可。
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/209162#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 29 Jun 2008 10:35:57 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/209162</link>
        <guid>http://googledave.javaeye.com/blog/209162</guid>
      </item>
      <item>
        <title>ubuntu上rails环境安装</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/208789" style="color:red;">http://googledave.javaeye.com/blog/208789</a>&nbsp;
          发表时间: 2008年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          # pcre-devel<br /># zlib-devel<br /># bzip2-devel <br />cp doc/sysconfig.lighttpd /etc/sysconfig/lighttpd<br />mkdir /etc/lighttpd<br />cp doc/lighttpd.conf /etc/lighttpd/lighttpd.conf<br />cp doc/rc.lighttpd.redhat /etc/init.d/lighttpd <br />配置文件很直观明了，一般只要把server.document-root、server.errorlog、accesslog.filename改成你的实际目录和文件名字就可以了。<br /><br />$ sbin/lighttpd -f lighttpd.conf # 启动lighttpd服务<br />$ ps aux 　 grep lighttpd<br />www 15403 0.0 0.9 2860 1148 ? S 00:15 0:00 sbin/lighttpd -f <br /><br />缺少openssl：<br />sudo apt-get install openssl<br />sudo apt-get install libssl-dev<br />sudo apt-get install libssl0.9.8<br />到原先安裝ruby 的source目錄<br />cd ext/openssl<br />ruby extconf.rb<br />make<br />make install<br />sudo apt-get install libopenssl-ruby1.8<br /><br /><br /><br />还有：<br />sudo apt-get install libmysqlclient15-dev(注意是数字15)<br />安装mysql适配器前要用到这个。<br /><br />还有就是要找好源<br /><br /><br />感觉ubuntu还是那样的不爽。<br />可惜red hat不能安装。<br /><br />subversion配置<br />1、安装<br /><br />$ sudo apt-get install subversion<br /><br />$ sudo apt-get install libapache2-svn<br />2、创建 SVN 仓库<br /><br />$ sudo mkdir /home/svn<br /><br />$ cd /home/svn<br /><br />$ sudo mkdir myproject<br /><br />$ sudo svnadmin create /home/svn/myproject<br /><br />$ sudo chmod 777 * -R<br />3、配置svnserve.conf<br /><br />去掉下面的注释<br /><br />[general]<br /><br />anon-access = read<br />      auth-access = write<br /><br />password-db = passwd<br /><br />去掉passwd中的两行注释<br /><br />[users]<br />      harry = harryssecret<br />      sally = sallyssecret<br />5、起动服务<br /><br />svnserve -d --foreground -r /home/svn<br />6、访问url<br /><br />svn://127.0.0.1/myproject
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/208789#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Jun 2008 18:59:50 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/208789</link>
        <guid>http://googledave.javaeye.com/blog/208789</guid>
      </item>
      <item>
        <title>mysql备份</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/206202" style="color:red;">http://googledave.javaeye.com/blog/206202</a>&nbsp;
          发表时间: 2008年06月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          备份：<br />mysqldump -u root -p --opt databasename >filenamne<br />password<br />还原：crate database databasename<br />mysql -u root -p databasename &lt;filename
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/206202#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 20 Jun 2008 14:24:53 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/206202</link>
        <guid>http://googledave.javaeye.com/blog/206202</guid>
      </item>
      <item>
        <title>ruby循环的实现形式</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/203869" style="color:red;">http://googledave.javaeye.com/blog/203869</a>&nbsp;
          发表时间: 2008年06月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ruby语言的用法非常的灵活。<br />我们来举个简单的例子：如我们有个数组<br />[code="ruby"]
array = %w[a b c d e f]
[/code]<br />现在我们要遍历该数组，并打印出每个元素：<br />[code="ruby"][
#方法一
length = array.list
length.times do |t|
 print "#{array[t]}"
end
/code]
[code="ruby"]
#方法二
length = array.list-1
for i in 0..length do
  print "#{array[i]}"
end
[/code]<br />[code="ruby"]
#方法三
for i in array do
  print "#{i}"
end
[/code]<br />[code="ruby"]
#方法四
length = array.list
i = 0
while i&lt; length do
  print "#{array[i]}"
  i = i+1
end
[/code]<br />[code="ruby"]
#方法五
length = array.list
i = 0
ubtil i==length do
  print "#{array[i]}"
  i += 1
end
[/code]<br />[code="ruby"]
#方法六
array.each do |i|
    print "#{i}"
end
[/code]<br />[code="ruby"]
#方法七
array.each_index do |i|
    print "#{array[i]}"
end
[/code]<br />[code="ruby"]
#方法八
length = array.list - 1
0.upto(length) do |i|#也可用downto：length.downto(0) do |i|
  print "#{array[i]}"
end
[/code]<br />[code="ruby"]
#方法九
length = array.list -1
i = 0
loop do
  print "#{array[i]}"
  i += 1
  break if i > length #也可以用break unless i &lt;= length 
end
[/code]
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/203869#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 15 Jun 2008 22:41:56 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/203869</link>
        <guid>http://googledave.javaeye.com/blog/203869</guid>
      </item>
      <item>
        <title>response.sendRedirect找不到路径</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/151530" style="color:red;">http://googledave.javaeye.com/blog/151530</a>&nbsp;
          发表时间: 2007年12月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我是用的tomcat服务器。<br />我的项目以前是在另一台服务器上的，还来转到这台服务器上。<br />发现response.sendRedirect("a.jsp")找不到路径。<br />改成<br />response.sendRedirect(request.getContextPath   +   "/a.jsp")<br />也不行。<br />改为：  <br />&lt;%<br />response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); <br />response.setHeader("Location","a.jsp"); <br />%><br />恢复正常。<br />用&lt;jsp:forward page="a.jsp">&lt;/jsp:forward>也可以。<br />在我测试的时候有的时候发现刷新的时候可以转向但是显示找不到页面。<br />如：我的文件的路径为：http://192.168.0.1/web/test.jsp<br />a.jsp和test.jsp在同一目录下（web）。刷新test.jsp会出现：<br />https://192.168.0.1:80/web/a.jsp<br />我想是协议的问题。<br />请教该如何设置，才能用相对路径。
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/151530#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</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>Fri, 28 Dec 2007 15:42:19 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/151530</link>
        <guid>http://googledave.javaeye.com/blog/151530</guid>
      </item>
      <item>
        <title>Rails2.0新特性介绍</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/149375" style="color:red;">http://googledave.javaeye.com/blog/149375</a>&nbsp;
          发表时间: 2007年12月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          转自<a href="http://www.letrails.cn/archives/07-11-23-rails20-features" target="_blank">Rails2.0新特性介绍（ 下）</a><br />如果不是答应了一家杂志写一篇关于Rails2.0的文章，估计这篇贴就永远不会有下文了，不过虽然叫下，但其实是参考了2.0的ChangeLog重新写的，有一些是DHH在2.0 Preview那篇贴里也没有提到的，如果你还没看过或者不打算看那密密麻麻的ChangeLog，那么这篇贴应该还是有点意义，不过编辑说他们杂志的风格是尽量少用代码，因此我去掉了一些我认为本应该有的代码。<br /><br />ActiveResource<br />Rails2.0最大的变化莫过于增加了ActiveResource，而去除了Action Web Services（有了REST，SOAP就显得很多余了），用实际行动为REST在与SOAP的竞争中投了一票。<br /><br />你 可以将ActiveResource理解为远程的ActiveRecord，也就是说不同于 ActiveRecord 操作存储在本地数据库中的对象，ActiveResource 操作的是存储于远端服务器上的对象，我们假设Person是一个ActiveResource类：<br /><br />Person = ActiveResource::Struct.new do |person|<br />  person.uri = "http://api.example.com/people"<br />end<br />Person.find(1).name #=> "Ryan"<br />那 么上面这句话将向http://api.example.com/people/1发送了一个GET请求，并通过得到的响应构建了一个本地Person对 象，你可以像操作其它对象一样来操作这个ActiveResource对象，只不过你对这个对象的CRUD操作都被转化为了相应的HTTP请求，交由远端 的服务器来处理，并且这一转换是完全完全遵照REST规范的：<br /><br />find(id)将被转化为针对http://api.example.com/people/id.xml的GET请求 <br />新建对象的save操作将执行 POST http://api.example.com/people <br />已有对象的save则执行 PUT http://api.example.com/people/id.xml <br />destroy则将执行 DELETE http://api.example.com/people/id.xml <br />list 则执行 GET http://api.example.com/people <br />当然，如果确实需要SOAP，你也可以以gem方式继续使用Action Web Services。<br /><br />Debugger<br />Rails2.0的另一个重大变化就是Debugger归来，Rails 1.x中的debugger受到ruby的一个bugfix的影响，已经停摆许久，不过这次借助强大的rdebug，重新归来的Rails debugger已经不再仅仅只是一个简单的IRB，而变成了一个真正意义上的功能齐全的调试器，支持单步调试，断点设置等等。并且也不再需要启动 script/breakpoint，只需要在启动script/server时增加debugger或-u参数，并在你需要进行调试的 controller中加入一行debugger即可：<br /><br />class PostsController &lt; ApplicationController<br />  debugger<br />   ...<br />end<br />这样当执行到这个controller的代码时，启动server的终端窗口将自动进入debugger模式，然后你就可以执行rdebug的调试命令了，如图：<br /><br /><br /><br />路由<br />另外Rails2.0的路由模块也发生了很大的变化，新的map.resource去除掉了1.2.x URL中的’;'，新的URL映射如下：<br /><br />GET /posts, PostsController#index <br />GET /posts/1, PostsController#show <br />GET /posts/1/new, PostsController#new <br />POST /posts, PostsController#create <br />GET /posts/1/edit, PostsController#edit <br />PUT /posts/1, PostsController#update <br />DELETE /posts/1, PostsController#destroy <br />同时，map resource还增加了namespace支持：<br /><br />map.namespace(:admin) do |admin|<br />  admin.resources :posts, has_many :tags<br />end<br />上面的代码将分别为路由helper和URL添加一个admin前缀：<br /><br />admin_posts_url 对应 /admin/posts <br />new_admin_post_url 对应 /admin/posts/1/new <br />admin_post_tags_url 则对应 /admin/posts/1/tags <br />同时Rails2.0还对资源嵌套做了相应改进，controller名称默认为复数，也就是说对于像map.resources :people, :has_one => :avatar这样的路由，如果不存在AvatarController，那么所有请求都将被路由到AvatarsController，如果你还有另外一条路由map.resources :avatars，那么他们就可以使用同一个controller。<br /><br />同时你可以直接使用model来指定URL，redirect_to(post)，link_to(person.name, post)，form_for(post)就相当于redirect_to(post_path)，link_to(post.title, post_path)，form_for(post, :url => post_path)<br /><br />模板<br />Rails2.0中另外一个重大改变就是增加了多渲染引擎支持，在1.x中，.rhtml文件对应HTML请求，由ERB引擎解析，rxml对应XML请 求。而Rails2.0将模板的命名分成了3个部分：action.format.renderer，在action确定后，它首先根据HTTP请求的 content_type选择合适的format，然后根据模板后缀的renderer调用合适的渲染引擎，比如：<br /><br />show.erb: 所有格式都使用此模板，使用ERB进行解析 <br />index.atom.builder：针对application/atom+xml格式，使用Builder引擎，相当于1.x中的rxml <br />edit.iphone.haml：针对自定义的Mime::IPHONE格式，使用HAML模板引擎（需要自己安装）渲染。 <br />Rails2.0鼓励开发者定义自己的MIME类型，所有新生成的应用的config目录下都将新增一个initializers/mime_types.rb的文件，你可以通过这个文件定义你自己的Mime类型，比如上例中的IPHONE：<br /><br /># should go in config/initializers/mime_types.rb<br />Mime.register_alias "text/html", :iphone<br />我们可以通过检查请求来源，来决定是否返回IPHONE格式的响应：<br /><br />if request.env["HTTP_USER_AGENT"] && request.env["HTTP_USER_AGENT"][/(iPhone|iPod)/]<br />   request.format = :iphone<br />end<br />然后就可以在action中调用format.iphone来为iPhone和iPod用户返回IPHONE格式的数据了。<br /><br />Migration<br />Migration现在变得更性感了，你不用再一遍遍的重复t.column :xxx, :xxx了，Rails2.0让你可以使用t.string :column_name建立新table。<br /><br />同时，你也可以直接通过model/scaffold generator来自动生成migration文件，新的model/scaffold generator支持通过key:value pairs来为你自动生成migration文件，因此只需执行：<br /><br />script/generate model post user_id:integer title:string content:text<br />rake db:migrate<br />一个包含user_id，title，content字段的posts表就已经躺在你的数据库里了。<br /><br />Rails2.0 的migration generator也做了改进，它变得更智能了，比如它会根据你起的文件名AddSomeStuffToCustomers，猜出你想要向 customers表中添加一些字段，从而根据后面的key:value pairs自动为你生成migration文件。<br /><br />其它<br />1. 新的Rake Tasks<br /><br />Rails2.0新增了许多很实用的rake tasks：<br /><br />rake routes，打印当前路由列表 <br />rake db:drop, rake db:drop:all, 删除当前环境或config/database.yml中的所有数据库 <br />rake db:create, rake db:create:all，创建当前环境数据库或或config/database.yml中的所有数据库 <br />rake db:version，显示当前环境数据库的schema版本号 <br />rake db:collation, db:charset，显示数据库的collation和charset <br />rake db:reset, 删除并重新创建当前环境的数据库 <br />2. HTTP Basic认证<br /><br />Rails2.0新增了一个模块用于处理HTTP认证，新的模块使用相当简单，你可以通过传递给authenticate_or_request_with_http_basic方法的Block来决定是否允许用户访问当前的action。<br /><br />3. 性能优化<br /><br />Rails2.0再性能方面还是做了不少改进的：<br /><br />Rails2.0通过合并JS和CSS文件对页面的加载速度进行了优化，再产品模式下，所有的JS和CSS文件都将被合并为一个all.js和all.css文件，但是再开发模式下，则不过变化。 <br />同 时，针对某些浏览器不愿意在同一时间发送太多请求到同一个域，Rails2.0提供了一个很简单的方法来欺骗浏览器，你只需要设置 ActionController::Base.asset_host = “assets%d.example.com”，Rails就会自动将你的链接（比如image）分散到从asset1到asset4的4个域中，从而提 高浏览器的并发。 <br />另外一个值得称道的性能改进就是增加了Query Cache，虽然目前还有局限（比如不支持:include等等），但这毕竟是个好的开始。 <br />同时 fixture的性能也得到了增强，比1.x提高了50-100%。 <br />4. 更简单的异常处理<br /><br />尽管Rails已经对大多数常见异常在action之上进行了处理，并且你也可以使用 rescue_action_in_public来覆盖通用的处理，但rescue_action_in_public要求你必须有一个case语句，并 且必须调用super，Rails2.0提供了一个新的 rescue_from方法，使用它，你可以更简单的对异常进行处理：<br /><br />rescue_from User::NotAuthorized, :with => :deny_access<br />一旦出现异常，deny_access将被调用，但是Rails对于这个自定义的方法没有任何限制。<br /><br />5. 安全<br />安全一直都是Rails的重中之重，Rails2.0在安全方面当然也做了大量改进：<br /><br />首先，通过在form中增加特殊字段来防止CRSF攻击，这一功能在新应用中默认是开启的 <br />同时，Rails2.0对XSS攻击的防范也得到增强，TextHelper#sanitize由黑名单改为了白名单实现 <br />Rails2.0还新增了对HTTP only cookies的支持（尽管现在并非所有浏览器都支持这一特性，但提前做好准备总没什么坏处） <br />6. Atom协议支持<br /><br />Rails2.0新增了一个AtomFeedHelper用于生成Atom标准的Feed.<br /><br />7. 插件<br /><br />除了将一些原本内置的特性改为插件（比如acts_as_list等）之外，Rails2.0对插件的控制更为灵活了，你可以通过config.plugins来控制加载那些插件以及以什么顺序来加载。<br /><br />8. 商业数据库支持<br /><br />Rails2.0 中，商业数据库的适配器被移出了Rails核心，只剩下MySQL, SQLite 和 PostgreSQL，如果你使用的不是这三种开源数据库，那么你需要自己通过gem来安装这些商业数据库的适配器，它们的命名遵照 activerecord-XYZ-adapter，比如activerecord-oracle-adapter。<br /><br />9. 启动设置<br /><br />修改environment.rb是不是常常让你头大，或者仅仅只是看着日益庞大的environment.rb 不爽？Rails2.0提供了一个config/initializer目录，所有放置于这个目录下的.rb文件都会在Rails启动成功后得到顺序执 行，因此现在你可以将你的启动脚本分成若干分，并给它们起个名字了。<br /><br />好了，Rails2.0能够数得出来的大的改变就这些了，如果还不满足，可以查看官方的ChangeLog，你可以找到从1.2.3到2.0的每一个细小变化，迫不及待想要试一试？<br /><br />svn co http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-0_RC1/ vendor/rails<br /><br />不过根据Rails官方的推荐，最好先升级你的Rails gem到1.2.5，解决掉所有的deprecation warnings，然后再升级到2.0，祝你好运！<br /><br />参考：<br /><br />http://blog.viget.com/whats-coming-in-rails-20/ <br />http://weblog.rubyonrails.org/2007/9/30/rails-2-0-0-preview-release <br />http://ryandaigle.com/articles/2006/06/30/whats-new-in-edge-rails-activeresource-is-here <br />作者: admin
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/149375#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Dec 2007 12:09:38 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/149375</link>
        <guid>http://googledave.javaeye.com/blog/149375</guid>
      </item>
      <item>
        <title>linux下mysql 启动问题</title>
        <author>sun201200204</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googledave.javaeye.com">sun201200204</a>&nbsp;
          链接：<a href="http://googledave.javaeye.com/blog/149100" style="color:red;">http://googledave.javaeye.com/blog/149100</a>&nbsp;
          发表时间: 2007年12月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          刚开始学mysql时都是用redhat自带的。启动是什么 /rc.d/init.d/ start<br />这很简单，但是后来越学越多，系统自带的mysql，有的是版本太低，有的是与<br />自己想要装的web服务需要的低版本的mysql<br /><br /><br />后来自己学着以tar的方式安装mysql，我的mysql装在/usr/local/mysql目录下启<br /><br /><br />动碰到过很多问题。最常见的是：<br />ERROR 2002: Can't connect to local MySQL server through socket <br /><br /><br />'/tmp/mysql.sock' (111)<br /><br /><br />解决办法：<br />[root@test mysql]# /usr/local/mysql/bin/mysqladmin -u root / <br />>  -S /var/lib/mysql/mysql.sock password 'your.passwd' <br />或者做个连接<br />ln -s /var/lib/mysql/mysql.sock /tmp <br />其实提示找不到 /tmp/mysql.sock有时也并不是/tmp目录下没这个文件，是启动<br />命令不对，我碰到过<br />常见的几种启动方式，自己也不是记得很清楚，如果你确定tmp下有mysql.sock这<br />个文件不妨试试另外的几个命令<br />/usr/local/mysql/bin/mysql -u root -p<br />/usr/local/mysql/bin/mysqld --user=mysql&<br />/usr/local/mysql/bin/mysqld --user=root& <br />/usr/local/mysql/bin/mysqld_safe --user=root&<br />/usr/local/mysql/bin/mysqld_safe --user=mysql&<br />/usr/local/mysql/bin/safe_mysqld--uer=root&(注意safe_mysqld与mysqld_safe是不同的，&表示mysql在后台运行)我的就会报错了<br />STOPPING server from pid file <br />/usr/local/mysql/data/localhost.localdomain.pid<br />060304 11:46:21  mysqld ended<br />这是权限问题，我的mysql目录属于root用户，也属于root群组，改用mysqld_safe启动就没问题了，<br />大家只要注意这几个mysql,safe_mysqld,mysqld_safe,mysqld,mysqladmin.多试<br />几次<br />其实有时mysql已经正常启动了，查看mysql是否启动命令<br />ps -aux | grep mysqld<br />会看到如下类似内容<br />mysql     6394  0.0  1.5 10528  992 pts/3    S    16:16   0:00 <br />/usr/local/mysql/ <br />mysql     6395  0.0  1.5 10528  992 pts/3    S    16:16   0:00 <br />/usr/local/mysql/ <br />mysql     6396  0.0  1.5 10528  992 pts/3    S    16:16   0:00 <br />/usr/local/mysql/ <br />root      6422  0.0  1.1  2408  732 pts/3    S    16:20   0:00 grep <br />mysql<br /><br /><br />查看mysql是否在监听端口命令<br />netstat -tl | grep mysql <br />会看到如下类似内容<br />tcp        0      0 *:mysql  *:*   LISTEN
          <br/>
          <span style="color:red;">
            <a href="http://googledave.javaeye.com/blog/149100#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 18 Dec 2007 13:11:10 +0800</pubDate>
        <link>http://googledave.javaeye.com/blog/149100</link>
        <guid>http://googledave.javaeye.com/blog/149100</guid>
      </item>
  </channel>
</rss>