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

<channel>
	<title>里克的自习室 &#187; RailsNote</title>
	<atom:link href="http://railser.cn/blog/category/tech/feed" rel="self" type="application/rss+xml" />
	<link>http://railser.cn</link>
	<description>关注Ruby和Rails的学习与开发</description>
	<lastBuildDate>Sun, 26 Feb 2012 12:20:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>rails new 特定版本</title>
		<link>http://railser.cn/blog/rails-new-%e7%89%b9%e5%ae%9a%e7%89%88%e6%9c%ac</link>
		<comments>http://railser.cn/blog/rails-new-%e7%89%b9%e5%ae%9a%e7%89%88%e6%9c%ac#comments</comments>
		<pubDate>Sun, 26 Jun 2011 05:27:30 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[RailsNote]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=643</guid>
		<description><![CDATA[rails _3.0.7_ new railstest 说明：安装多个版本，尤其安装了3.1.0 pre 后，使用Rails 3.0.7这个最新稳定版开发项目。]]></description>
			<content:encoded><![CDATA[<p>rails _3.0.7_ new railstest</p>
<p>说明：安装多个版本，尤其安装了3.1.0 pre 后，使用Rails 3.0.7这个最新稳定版开发项目。</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/rails-new-%e7%89%b9%e5%ae%9a%e7%89%88%e6%9c%ac/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>crontab的写法误解</title>
		<link>http://railser.cn/blog/crontab</link>
		<comments>http://railser.cn/blog/crontab#comments</comments>
		<pubDate>Mon, 20 Jun 2011 12:05:25 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[RailsNote]]></category>
		<category><![CDATA[crontab]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=639</guid>
		<description><![CDATA[crontab的标准写法参照这里，http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-autotasks.html 那么，每阁特定小时运行命令如何写呢？ 每隔30分钟，运行一次命令，可以写 */30 * * * * /sbin/do_something 每隔4小时，可以写成 * */4 * * * /sbin/do 吗？不可以，这样会产生很严重的错误，导致我每分钟运行一次命令，直到某种情况下被中止。想到这我真心疼我的mysql和cpu。 这里正确的写法应该是 0 0,4,8,12,16,20 * * * /sbin/do (whenever 给出的写法) 或者 0 */4 * * * /sbin/do (我认为可行的写法，不过至今未确认，这个写法可以从保存时开始，每隔4小时执行一次) 两个写法，都要在第一个位置，指定执行开始的分钟数。 请各位指正，我也继续验证一下我的写法。 &#160;]]></description>
			<content:encoded><![CDATA[<p>crontab的标准写法参照这里，http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-autotasks.html</p>
<p>那么，每阁特定小时运行命令如何写呢？</p>
<p>每隔30分钟，运行一次命令，可以写</p>
<p>*/30 * * * * /sbin/do_something</p>
<p>每隔4小时，可以写成</p>
<p>* */4 * * * /sbin/do</p>
<p>吗？不可以，这样会产生很严重的错误，导致我每分钟运行一次命令，直到某种情况下被中止。想到这我真心疼我的mysql和cpu。</p>
<p>这里正确的写法应该是</p>
<p>0 0,4,8,12,16,20 * * * /sbin/do (<a href="https://github.com/javan/whenever" target="_blank">whenever</a> 给出的写法)</p>
<p>或者</p>
<p>0 */4 * * * /sbin/do (我认为可行的写法，不过至今未确认，这个写法可以从保存时开始，每隔4小时执行一次)</p>
<p>两个写法，都要在第一个位置，指定执行开始的分钟数。</p>
<p>请各位指正，我也继续验证一下我的写法。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/crontab/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>readline load error的解决办法</title>
		<link>http://railser.cn/blog/readline-load-error-rails307</link>
		<comments>http://railser.cn/blog/readline-load-error-rails307#comments</comments>
		<pubDate>Mon, 20 Jun 2011 07:55:24 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[RailsNote]]></category>
		<category><![CDATA[readline]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=636</guid>
		<description><![CDATA[服务器总算都调试完了，今天打算看一下一个app的具体信息，发现 rails c提示错误。 这是个常见的错误：`require': no such file to load -- readline (LoadError) 原因：缺少readline 解决办法：进入rvm ruby1.9.7的src，安装readline 具体： &#62;&#62; which ruby /usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby &#62;&#62; cd /usr/local/rvm/src/ruby-1.9.2-p180/ext/readline &#62;&#62; ruby extconf.rb &#62;&#62; make &#62;&#62; make install 再次rails c，解决问题了。 笔记太有用了，都省去了回忆的时间。]]></description>
			<content:encoded><![CDATA[<p>服务器总算都调试完了，今天打算看一下一个app的具体信息，发现 rails c提示错误。</p>
<p>这是个常见的错误：`require': no such file to load -- readline (LoadError)</p>
<p>原因：缺少readline</p>
<p>解决办法：进入rvm ruby1.9.7的src，安装readline</p>
<p>具体：</p>
<p>&gt;&gt; which ruby</p>
<p>/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby</p>
<p>&gt;&gt; cd /usr/local/rvm/src/ruby-1.9.2-p180/ext/readline</p>
<p>&gt;&gt; ruby extconf.rb</p>
<p>&gt;&gt; make</p>
<p>&gt;&gt; make install</p>
<p>再次rails c，解决问题了。</p>
<p>笔记太有用了，都省去了回忆的时间。</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/readline-load-error-rails307/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在CentOS5上部署Rails3应用</title>
		<link>http://railser.cn/blog/rails-on-centos-step-by-step</link>
		<comments>http://railser.cn/blog/rails-on-centos-step-by-step#comments</comments>
		<pubDate>Mon, 06 Jun 2011 16:02:41 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[Advanced Rails]]></category>
		<category><![CDATA[RailsNote]]></category>
		<category><![CDATA[capistrano]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rvm]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[whenever]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=609</guid>
		<description><![CDATA[1、安装rvm 安装rvm前，要先安装git。因为rvm的安装教程就是一个git的小脚本。 &#62;&#62;wget http://kernel.org/pub/software/scm/git/git-1.7.5.3.tar.bz2 Oop！这里有个问题，我tar不常用，这里tar xvfz git-... 是会提出格式错误的，查了一下需要换一个命令：tar -xvjpf git-... 之后， make prefix=/usr/local all make prefix=/usr/local install 看到git 版本后，安装rvm git --version 剩下的，就是按照 https://rvm.beginrescueend.com/rvm/install/ 的讲解一步步安装吧，最后，阿？为什么 type rvm &#124; head -1 会提示错误呢？我也被搞糊涂了，按照提示，我重新打开一个终端窗口，这下正常了。所以再看看文档吧。 接着，安装1.8.7 2、安装ruby 1.8.7和gem rvm install 1.8.7 注：我又将用户切换回了root，而在进行到Load RVM into your shell sessions as a function的时候，我不得不切换回user。 rvm use 1.8.7 显示正常了。 安装gems http://rubygems.org/pages/download 3、安装rails gem install rails -v [...]]]></description>
			<content:encoded><![CDATA[<p>1、安装rvm</p>
<p>安装rvm前，要先安装git。因为rvm的安装教程就是一个git的小脚本。</p>
<p>&gt;&gt;wget http://kernel.org/pub/software/scm/git/git-1.7.5.3.tar.bz2</p>
<p>Oop！这里有个问题，我tar不常用，这里tar xvfz git-... 是会提出格式错误的，查了一下需要换一个命令：tar -xvjpf git-...</p>
<p>之后，</p>
<p>make prefix=/usr/local all</p>
<p>make prefix=/usr/local install</p>
<p>看到git 版本后，安装rvm</p>
<p>git --version</p>
<p>剩下的，就是按照 https://rvm.beginrescueend.com/rvm/install/ 的讲解一步步安装吧，最后，阿？为什么</p>
<pre>type rvm | head -1</pre>
<p>会提示错误呢？我也被搞糊涂了，按照提示，我重新打开一个终端窗口，这下正常了。所以再看看文档吧。</p>
<p>接着，安装1.8.7</p>
<p>2、安装ruby 1.8.7和gem</p>
<p>rvm install 1.8.7</p>
<p>注：我又将用户切换回了root，而在进行到Load RVM into your shell sessions as a function的时候，我不得不切换回user。</p>
<p>rvm use 1.8.7</p>
<p>显示正常了。</p>
<p>安装gems</p>
<p>http://rubygems.org/pages/download</p>
<p>3、安装rails</p>
<p>gem install rails -v 3.0.7 --no-rdoc --no-ri</p>
<p>如果安装rdoc和ri，我出现了问题，具体的情况未明。</p>
<p>问题又来了，&gt;&gt; rails -v 找不到命令</p>
<p>翻看文章的过程中，有一句话很重要，“gem install rails     # 注意不要加sudo，否则会安到系统的ruby下，而不是rvm的ruby下”</p>
<p>这是在百度里查到的，可是不用root，rvm也没安装成功，还是我最开始忘记使用user，而在安装完rvm后，ruby也用了root权限安装。不知道这里的影响会有什么，总之，我犯了一个错误，版本搭配错误。</p>
<p>应该是 ruby1.9.2搭配rails3.0.7。</p>
<p>好吧，还好有rvm，安装ruby1.9.2，再 gem install rails，竟然没有出现第一次时候的 ri 错误。欣慰吧。</p>
<p>这里还有一些细节，不影响整体即可，现在 rails new testrails 成功创建了一个应用。</p>
<p>4、安装svn</p>
<p>曾经熟悉的svn页面，已经转移到 apache 下，地址在这，http://subversion.apache.org/ ，用户手册在 http://svnbook.red-bean.com/ 。</p>
<p>按照一些文章介绍，安装svn实在太复杂了，突然我想起来yum和apt-get。来试一下。</p>
<p>yum install subversion</p>
<p>成功了。</p>
<p>按照<a href="http://www.hostingrails.com/Subversion-Rails-Implement-Your-Own-Version-Control-System" target="_blank">这个文档</a>，我配置过两次，这里不再详述了，又需要的朋友看一下。</p>
<p>我每次都会参照它ignore的操作。</p>
<p>5、<span style="color: #ff0000;">ssh配置</span></p>
<p>在我本地重新生成一个key，其实没必要的，我只是出于练习的目的。</p>
<p>&gt;&gt; ssh-keygen -t rsa</p>
<p>在服务器上</p>
<p>&gt;&gt; mkdir .ssh (其实没太大必要了，因为我的key不打算放到这里了)</p>
<p>然后传输这个key上去</p>
<p>&gt;&gt; scp ~/.ssh/id_rsa.pub loginname@hostdomain:.ssh/authorized_keys</p>
<p>这里把key命名为authorized_keys。按照一些教程的说明，综合起来简单笔记一下。</p>
<p>在/etc/ssh/&lt;username&gt;建立文件夹，将authorized_keys mv进来，并给予权限</p>
<p>&gt;&gt; chmod 755 &lt;username&gt;</p>
<p>&gt;&gt; chmod 644 &lt;username&gt;/authorized_keys</p>
<p>编辑/etc/ssh/sshd_config，改写这一行</p>
<p>AuthorizedKeysFile    /etc/ssh/%u/authorized_keys</p>
<p>并取消注释这两行</p>
<p>RSAAuthentication yes</p>
<p>PubkeyAuthentication yes</p>
<p>保存后，</p>
<p>&gt;&gt; /etc/init.d/sshd restart</p>
<p>启动另一个终端，登录时弹出一个窗口提示输入密码，其实就是刚才生成key时候的passphrase。确认后，就不用输入密码直接登录了。</p>
<p>这里有一个调试经验。</p>
<p>&gt;&gt; ssh -v name@domain</p>
<p>会输出交互信息，这里我发现它先校验key，如果不通过，就校验登录密码了。所以，如果上面的任何一个步骤有问题，比如权限不对或者写错字母，这里就会继续提示需要密码。</p>
<p>如果上面的都正确了，这时就不用再次输入密码直接登录了。</p>
<p>感谢<a href="https://help.ubuntu.com/community/SSH/OpenSSH/Keys" target="_blank">这篇文章</a>，让我节省了如此多的时间。感谢分享的精神。</p>
<p>接着需要提高一些安全性了，常见的有</p>
<p>PermitRootLogin no （禁止用root登录，这是默认的，当然有些时候会被其他的开发人员打开，检查一下是必要的）</p>
<p>StrictModes yes （也是默认的）</p>
<p>PasswordAuthentication no （禁用密码登录，加上这个安全性就足够了，当然还有其他，欢迎各位指点。）</p>
<p>&nbsp;</p>
<p>时间过去了一个星期，这期间我在调试一个Rails程序，打算下面部署到服务器上，而不是随便用个railstest应付了事。这里又温习了很多rails得技巧，不过时间好快，一下子就是8天的时间。</p>
<p>好了，我的Rails程序已经基本完成小样了，开始用capistrano设置。</p>
<p>6、Capistrano</p>
<p>这里稍微特殊一些的地方，是我用的svn+ssh（注意顺序，写反了不行）链接服务器并cap命令。这里没有办法证明一件事情，写出来供大家参考，就是私钥设置完，在服务器上也测试一下，比如</p>
<p>svn checkout -q  -r5 svn+ssh://domain.com/test/trunk tmp</p>
<p>这里会要求输入passphrase，或者添加host到know_host，都可能潜在的影响第一次cap的成功。当然，第一次cap失败可能是必然的，关键是下面分享一下我的deploy.rb给大家参考，减少一些查询的时间，当然很多东西还得看过说明才了解，建议看<a href="http://help.github.com/capistrano/" target="_blank">这篇文章</a>，很有帮助。</p>
<p>下面是我的代码</p>
<p>(略过)</p>
<p>在配置svn的时候，会有不同的权限设置，比如网站目录会放到/var/www/中，我觉得这是安全性的问题，超过这个笔记的范围，就不记述了。不过这其间还是看了一些文章，后面做安全调整的时候会用上的。</p>
<p>补充几个命令</p>
<p>cap -H 查看帮助</p>
<p>cap -T 查看任务，-vT查看更多任务</p>
<p>cap -e deploy:cold 查看deploy:cold 的说明</p>
<p>7、apapche，nginx和passenger</p>
<p>因为CentOS上的apache已经安装好了，所以这里只要安装一下passenger就可以了，安装起来竟然无比简单，缺少的lib按照提示yum一下就可以了。</p>
<p>&nbsp;</p>
<p>8、安装sqlite3-ruby的问题</p>
<p>google了一下发现很多人安装这个出现问题，yum install sqlite3-ruby 也不可以，这里很奇怪，yum竟然找不到这个包。</p>
<p>省去一些步骤，直接 yum search sqlite， 发现给出的包有：</p>
<div>
<div>
<div>mono-data-sqlite.i386 : sqlite database connectivity for Mono</div>
<div>pdns-backend-sqlite.i386 : SQLite backend for pdns</div>
<div>php-pear-Log.noarch : Abstracted logging facility for PHP</div>
<div>python-sqlite.i386 : Python bindings for sqlite.</div>
<div>qt4-sqlite.i386 : SQLite drivers for Qt's SQL classes</div>
<div>sqlite.i386 : Library that implements an embeddable SQL database engine</div>
<div>sqlite-devel.i386 : Development tools for the sqlite3 embeddable SQL database engine.</div>
</div>
</div>
<p>原来是包的名称不对，所以</p>
<p>yum install sqlite.i386</p>
<p>提示已经安装</p>
<p>yum install sqlite-devel.i386</p>
<p>安装成功，再次 gem install sqlite3，提示</p>
<p>sqlite3-ruby only supports sqlite3 versions 3.6.16+, please upgrade!</p>
<p>好，可算有了进展。下载 http://www.sqlite.org/download.html 最新版本的sqlite，安装后，再次 gem install sqlite3，成功了！！</p>
<p>回到rails目录，再次 bundle install。胜利完成。</p>
<p>9、rake任务出错，/lib/rake.rb:32: warning: already initialized constant RAKEVERSION</p>
<p>临时的解决办法，bundle exec rake RAILS_ENV=production  db:migrate</p>
<p>这不是最终解决办法，还在找，刚才心急一下给发布了，其实还没写完呢。。</p>
<p>问题发现了，是rake的问题，卸载之后重新安装rake 0.8.7，问题暂时解决。</p>
<p>10、No such file or directory - /tmp/mysql.sock</p>
<p>CentOS的位置和方法，在此备注，ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock</p>
<p>11、invalid packet: sequence number mismatch(3 != 1(expected))</p>
<p>说是ruby-mysql2.9.4的问题，暂时使用2.9.3。但是问题依旧。</p>
<p>gem 'mysql2', '0.2.7' 和gem 'mysql'的区别</p>
<p>最新版本的mysql2，是0.3.2，这是集成进rails3.1的，不适用于rails3.0.7，所以需要指定版本为0.2.7，环境可以为Raisl 3.0.x和mysql 5.x</p>
<p>gem 'ruby-mysql'和gem 'mysql-ruby'的区别：都不用了，直接用 gem 'mysql'</p>
<p>“invalid packet: sequence number mismatch”的问题已经解决，去掉ruby-mysql的gem，直接使用 gem 'mysql'</p>
<p>在我的版本环境里，gem 'mysql2'也不行，我的环境，rvm, ruby1.9.2p180, rails 3.0.7</p>
<p>12、rake 0.9.2和0.8.7，会被同时安装，也会因为0.9.2产生问题，建议删除0.9.2</p>
<p>&nbsp;</p>
<p>13、自动执行rake任务</p>
<p>看了一些介绍，其实总结起来是三个事情</p>
<p>（1）参照系统默认的crontab任务，这方面资料很多</p>
<p>（2）rails的好处是gem和实现方案很多，建议使用 <a href="https://github.com/javan/whenever" target="_blank">whenever</a> 来实现，它会直接提示代码如何写，粘贴到当前用户的crontab里就可以</p>
<p>（3）具体做法，</p>
<p>&gt;&gt; crontab -e   编辑当前用户的cron任务</p>
<p>&gt;&gt;  */30 * * * * /bin/bash -l -c 'cd /home/liwei/wwwroot/appflying.com &amp;&amp; RAILS_ENV=production rake autorss:work --silent'</p>
<p>其实这个文件就这一行就可以，我完整的代码是</p>
<p>SHELL=/bin/bash</p>
<p>PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rvm/gems/ruby-1.9.2-p180@global/bin</p>
<p>MAILTO=root</p>
<p>HOME=/home/liwei<br />
*/30 * * * * /bin/bash -l -c 'cd /home/liwei/wwwroot/appflying.com &amp;&amp; RAILS_ENV=production rake autorss:work --silent'</p>
<p>&nbsp;</p>
<p>写在最后：算是大功告成？？其实我没感觉，但是总算把我想写的内容写完了。后面还会有一些笔记。这个笔记到此用了2周时间，留念。</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/rails-on-centos-step-by-step/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hello, rails3.1 pre 第二部分</title>
		<link>http://railser.cn/blog/hello-rails31-pre-part2</link>
		<comments>http://railser.cn/blog/hello-rails31-pre-part2#comments</comments>
		<pubDate>Sun, 22 May 2011 07:05:51 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[default]]></category>
		<category><![CDATA[RailsNote]]></category>
		<category><![CDATA[rails31]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=605</guid>
		<description><![CDATA[接着上一篇，问题继续。 rake db:migrate &#62;&#62; rake aborted! &#62;&#62; undefined method `task' for #&#60;Rails31test::Application:0x00000100de6a60&#62; 好吧，继续找答案，此处还是省略一些细节，直接看这里吧。 &#62;&#62; bundle exec rake db:migrate 问题暂时解决。 至此，projects已经可以看到了，剩下的还在琢磨。 补充一些链接： CoffeeScript  http://jashkenas.github.com/coffee-script/ RVM(Ruby Version Manager)  https://rvm.beginrescueend.com/ SASS/SCSS  http://sass-lang.com/ Sprockets  http://getsprockets.org/ &#160; &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>接着上一篇，问题继续。</p>
<p>rake db:migrate</p>
<p>&gt;&gt; rake aborted!</p>
<p>&gt;&gt; undefined method `task' for #&lt;Rails31test::Application:0x00000100de6a60&gt;</p>
<p>好吧，继续找答案，此处还是省略一些细节，<a href="http://community.engineyard.com/discussions/problems/1391-you-have-already-activated-rake-083-but-your-gemfile-requires-rake-087-consider-using-bundle-exec" target="_blank">直接看这里</a>吧。</p>
<p>&gt;&gt; bundle exec rake db:migrate</p>
<p>问题暂时解决。</p>
<p>至此，projects已经可以看到了，剩下的还在琢磨。</p>
<p>补充一些链接：</p>
<p>CoffeeScript  <a href="http://jashkenas.github.com/coffee-script/" target="_blank">http://jashkenas.github.com/coffee-script/</a></p>
<p>RVM(Ruby Version Manager)  <a href="https://rvm.beginrescueend.com/" target="_blank">https://rvm.beginrescueend.com/</a></p>
<p>SASS/SCSS  <a href="http://sass-lang.com/" target="_blank">http://sass-lang.com/</a></p>
<p>Sprockets  <a href="http://getsprockets.org/" target="_blank">http://getsprockets.org/</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/hello-rails31-pre-part2/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hello, Rails3.1 pre</title>
		<link>http://railser.cn/blog/hello-rails31-pre</link>
		<comments>http://railser.cn/blog/hello-rails31-pre#comments</comments>
		<pubDate>Sat, 21 May 2011 07:08:34 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[default]]></category>
		<category><![CDATA[RailsNote]]></category>
		<category><![CDATA[rails31]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=601</guid>
		<description><![CDATA[Rails3.1面世了，赶紧尝鲜吧。可是，第一个问题就出现了，更新失败。此处略过一堆字，直接笔记：安装rvm吧。 https://rvm.beginrescueend.com/rvm/install/ rvm简直是多版本ruby开发环境下的救世主。补充一下笔记： 在安装完rvm后，rails new rails31test 新建了一个测试项目，一切正常，可是bundle的时候出错，就连 gem list都出错。查了一下，原来我们要重新安装gem，也要重新装rails。 ps：各位是不是会觉得，我刚才安装了阿，为什么又要装一次？你是不是也看这个视频了？http://railscasts.com/episodes/265-rails-3-1-overview 一切都没错，只是rvm 1.9.2@railspre --create 是新建了一个gemsets，（此语法为简写）。这样我们还得安装一下bundler rails31test liwei$ gem install bundler rails31test liwei$ bundle rails31test liwei$ rails g scaffold project name:string ... ... /Users/apple/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.1.0.beta1/lib/sprockets/railtie.rb:37:in `block (2 levels) in &#60;class:Railtie&#62;': undefined method `context' for #&#60;Sprockets::Environment:0x0000010312c420&#62; (NoMethodError) 查到这个问题的解决办法：https://github.com/rails/rails/issues/453 在Gemfile里写： gem 'sprockets', '2.0.0.beta.2' 原因：beta.2 is required by rails 3.1.0beta1 注意：安装的时候，使用的是 gem [...]]]></description>
			<content:encoded><![CDATA[<p>Rails3.1面世了，赶紧尝鲜吧。可是，第一个问题就出现了，更新失败。此处略过一堆字，直接笔记：安装rvm吧。</p>
<p>https://rvm.beginrescueend.com/rvm/install/</p>
<p>rvm简直是多版本ruby开发环境下的救世主。补充一下笔记：</p>
<p>在安装完rvm后，rails new rails31test 新建了一个测试项目，一切正常，可是bundle的时候出错，就连 gem list都出错。查了一下，原来我们要重新安装gem，也要重新装rails。</p>
<p>ps：各位是不是会觉得，我刚才安装了阿，为什么又要装一次？你是不是也看这个视频了？http://railscasts.com/episodes/265-rails-3-1-overview</p>
<p>一切都没错，只是rvm 1.9.2@railspre --create 是新建了一个gemsets，（此语法为简写）。这样我们还得安装一下bundler</p>
<p>rails31test liwei$ gem install bundler</p>
<p>rails31test liwei$ bundle</p>
<p>rails31test liwei$ rails g scaffold project name:string</p>
<p>... ...</p>
<p>/Users/apple/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.1.0.beta1/lib/sprockets/railtie.rb:37:in `block (2 levels) in &lt;class:Railtie&gt;': undefined method `context' for #&lt;Sprockets::Environment:0x0000010312c420&gt; (NoMethodError)</p>
<p>查到这个问题的解决办法：https://github.com/rails/rails/issues/453</p>
<p>在Gemfile里写：</p>
<p>gem 'sprockets', '2.0.0.beta.2'</p>
<p>原因：beta.2 is required by rails 3.1.0beta1</p>
<p><span style="color: #ff0000;">注意：安装的时候，使用的是 gem 'sprockets', '2.0.0.beta.5'，所以还要 bundle update sprockets 降回到beta.2</span></p>
<p>再次</p>
<p>rails31test liwei$ rails g scaffold project name:string</p>
<p>成功</p>
<p>未完待续吧... ...</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/hello-rails31-pre/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>errors.add_to_base和errors.add</title>
		<link>http://railser.cn/blog/add_to_base-and-add-in-rails-model-errors</link>
		<comments>http://railser.cn/blog/add_to_base-and-add-in-rails-model-errors#comments</comments>
		<pubDate>Sun, 20 Mar 2011 14:13:11 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[RailsNote]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=583</guid>
		<description><![CDATA[我们在页面上进行ajax校验属性的时候，有两种情况会碰到。 一种是，只要出错，就给一个提示。这个比较常见的就是“您填写的用户名或密码不正确”。因为这里可能做了三组判断，先判断用户名是否存在，然后是密码是否为空，三是两者能否检索出一条纪录。如果那个出现为空，就直接返回false，controller也就直接宣布了上面那句话。 第二种比较复杂，就是每个属性都会给一个详细的解释，甚至多个解释，比如邮件格式不正确，邮件不能为空，邮件应该以字母开头等等。因为ajax判断有时候不一定会把model实例传回来，而可能只给一个message，让view去针对该输入进行提示，比如那个经典的输入矿失去焦点时校验。 针对上面两种方法，我经常用到的就是 errors.add_to_base 和 errors.add 方法。这里做以笔记。内容来自rdoc &#160; def validate! errors.add&#40;:name, &#34;can not be nil&#34;&#41; if name == nil end &#160; &#160; def validate! errors.add_to_base&#40;&#34;can not be nil&#34;&#41; if name == nil end &#160; 其实，它们是一样的 &#160; def add_to_base&#40;msg&#41; add&#40;:base, msg&#41; end &#160; 做以笔记，因为有时候真的会忘记这些小代码。 补充几个方法： &#160; def Person.human_attribute_name&#40;attr, options = &#123;&#125;&#41; attr end &#160; 它可以把名称更人性化的输出，比如“first_name” [...]]]></description>
			<content:encoded><![CDATA[<p>我们在页面上进行ajax校验属性的时候，有两种情况会碰到。</p>
<p>一种是，只要出错，就给一个提示。这个比较常见的就是“您填写的用户名或密码不正确”。因为这里可能做了三组判断，先判断用户名是否存在，然后是密码是否为空，三是两者能否检索出一条纪录。如果那个出现为空，就直接返回false，controller也就直接宣布了上面那句话。</p>
<p>第二种比较复杂，就是每个属性都会给一个详细的解释，甚至多个解释，比如邮件格式不正确，邮件不能为空，邮件应该以字母开头等等。因为ajax判断有时候不一定会把model实例传回来，而可能只给一个message，让view去针对该输入进行提示，比如那个经典的输入矿失去焦点时校验。</p>
<p>针对上面两种方法，我经常用到的就是 errors.add_to_base 和 errors.add 方法。这里做以笔记。内容来自rdoc</p>
<pre class="ruby">&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> validate!
    errors.<span style="color:#9900CC;">add</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span>, <span style="color:#996600;">&quot;can not be nil&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">if</span> name == <span style="color:#0000FF; font-weight:bold;">nil</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;</pre>
<pre class="ruby">&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> validate!
    errors.<span style="color:#9900CC;">add_to_base</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;can not be nil&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">if</span> name == <span style="color:#0000FF; font-weight:bold;">nil</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;</pre>
<p>其实，它们是一样的</p>
<pre class="ruby">&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> add_to_base<span style="color:#006600; font-weight:bold;">&#40;</span>msg<span style="color:#006600; font-weight:bold;">&#41;</span>
    add<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:base</span>, msg<span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;</pre>
<p>做以笔记，因为有时候真的会忘记这些小代码。</p>
<p>补充几个方法：</p>
<pre class="ruby">&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> Person.<span style="color:#9900CC;">human_attribute_name</span><span style="color:#006600; font-weight:bold;">&#40;</span>attr, options = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    attr
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;</pre>
<p>它可以把名称更人性化的输出，比如“first_name” 输出为 "First name"。但是它是一个过时的方法，我们会得到一个提示："ActiveRecord::Errors#generate_message has been deprecated. Please use ActiveRecord::Error.new().to_s."</p>
<pre class="ruby">&nbsp;
    company = Company.<span style="color:#9900CC;">create</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:address</span> =&gt; <span style="color:#996600;">'123 First St.'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    company.<span style="color:#9900CC;">errors</span>.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span><span style="color:#006600; font-weight:bold;">&#41;</span>      <span style="color:#008000; font-style:italic;"># =&gt; [&quot;is too short (minimum is 5 characters)&quot;, &quot;can't be blank&quot;]</span>
    company.<span style="color:#9900CC;">errors</span>.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:email</span><span style="color:#006600; font-weight:bold;">&#41;</span>     <span style="color:#008000; font-style:italic;"># =&gt; &quot;can't be blank&quot;</span>
    company.<span style="color:#9900CC;">errors</span>.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:address</span><span style="color:#006600; font-weight:bold;">&#41;</span>   <span style="color:#008000; font-style:italic;"># =&gt; nil</span>
&nbsp;</pre>
<p>显而易见</p>
<pre class="ruby">&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> on_base
    on<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:base</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;</pre>
<p>对上面方法的一个补充。</p>
<p>我喜欢netbeans的一个很重要原因就是查看这些代码的doc很方便，有时候一个简单的方法附近的doc就能读上和体会一阵子。呵呵。</p>
<p>其他实用的方法欢迎各位补充。</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/add_to_base-and-add-in-rails-model-errors/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autotest and Growl</title>
		<link>http://railser.cn/blog/autotest-and-growl</link>
		<comments>http://railser.cn/blog/autotest-and-growl#comments</comments>
		<pubDate>Sat, 13 Nov 2010 02:16:01 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[RailsNote]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=533</guid>
		<description><![CDATA[第一步安裝Growl http://growl.info/index.php 注意要安裝擴展中的 growlnotify。 growlnotify is a command-line tool to post Growl notifications. 第二步設置Growl Open the Growl Preference Panel (System > Growl) and activate "Listen for incoming notifications" and "Allow remote application registration" options on the Network tab. 第三步安裝相關gem 1 gem install autotest 2 gem install ZenTest 3 gem install autotest-rails-pure autotest 和 ZenTest 缺一不可，下面的gem不用安裝，不過這講了 [...]]]></description>
			<content:encoded><![CDATA[<p>第一步安裝Growl<br />
http://growl.info/index.php 注意要安裝擴展中的 growlnotify。 growlnotify is a command-line tool to post Growl notifications.</p>
<p>第二步設置Growl<br />
Open the Growl Preference Panel (System > Growl) and activate "Listen for incoming notifications" and "Allow remote application registration" options on the Network tab. </p>
<p>第三步安裝相關gem<br />
1 gem install autotest<br />
2 gem install ZenTest<br />
3 gem install autotest-rails-pure<br />
autotest 和 ZenTest 缺一不可，下面的gem不用安裝，不過這講了 autotest-rails-pure 的功用。</p>
<p>https://github.com/svoop/autotest-growl</p>
<p>4 gem install notifier  </p>
<p>https://github.com/fnando/notifier</p>
<p>5 gem install test_notifier</p>
<p>https://github.com/fnando/test_notifier</p>
<p>第四步配置 ~/.autotest 文件<br />
添加如下 require "test_notifier/runner/autotest"</p>
<p>附1：如果使用RSpec 2 需要在 spec_helper.rb 文件中添加 require "test_notifier/runner/rspec"<br />
附2：不要相信什麼autotest和ZenTest裝一個就可以的鬼話，我親身測試，缺一不可。另外即便你使用Rails3，也不需要在Gemfile進行配置了，因為它要操作Growl的，你再怎麼配置文件也沒辦法保證其它開發者和你一樣安裝了Growl並且設置好了它的屬性，所以讓別人玩蛋去吧～<br />
附3：考慮到看文章的人有可能還是從Rails1.×的時代過來的，那麼加一句，現在執行 autotest 後面不用加那個 . 了</p>
<p>本文參考 http://exviva.posterous.com/running-autotest-with-rails-3</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/autotest-and-growl/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails3：rails destroy scaffold Page</title>
		<link>http://railser.cn/blog/rails3%ef%bc%9arails-destroy-scaffold-page</link>
		<comments>http://railser.cn/blog/rails3%ef%bc%9arails-destroy-scaffold-page#comments</comments>
		<pubDate>Sat, 09 Oct 2010 15:53:17 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[RailsNote]]></category>
		<category><![CDATA[rails3]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=512</guid>
		<description><![CDATA[笔记一下，不常用的destroy命令，和generate相反。有时候写错了一个关键的地方，随手想删掉，就想到它了。比如刚才。。。 liwei$ rails destroy --help Usage: rails destroy GENERATOR [args] [options] General options: -h, [--help]     # Print generator's options and usage -p, [--pretend]  # Run but do not make any changes -f, [--force]    # Overwrite files that already exist -s, [--skip]     # Skip files that already exist -q, [--quiet]   [...]]]></description>
			<content:encoded><![CDATA[<p>笔记一下，不常用的destroy命令，和generate相反。有时候写错了一个关键的地方，随手想删掉，就想到它了。比如刚才。。。</p>
<div id="_mcePaste">liwei$ rails destroy --help</div>
<div id="_mcePaste">Usage: rails destroy GENERATOR [args] [options]</div>
<div id="_mcePaste">General options:</div>
<div id="_mcePaste">-h, [--help]     # Print generator's options and usage</div>
<div id="_mcePaste">-p, [--pretend]  # Run but do not make any changes</div>
<div id="_mcePaste">-f, [--force]    # Overwrite files that already exist</div>
<div id="_mcePaste">-s, [--skip]     # Skip files that already exist</div>
<div id="_mcePaste">-q, [--quiet]    # Suppress status output</div>
<div id="_mcePaste">Please choose a generator below.</div>
<div id="_mcePaste">Rails:</div>
<div id="_mcePaste">controller</div>
<div id="_mcePaste">generator</div>
<div id="_mcePaste">helper</div>
<div id="_mcePaste">integration_test</div>
<div id="_mcePaste">mailer</div>
<div id="_mcePaste">migration</div>
<div id="_mcePaste">model</div>
<div id="_mcePaste">observer</div>
<div id="_mcePaste">performance_test</div>
<div id="_mcePaste">plugin</div>
<div id="_mcePaste">resource</div>
<div id="_mcePaste">scaffold</div>
<div id="_mcePaste">scaffold_controller</div>
<div id="_mcePaste">session_migration</div>
<div id="_mcePaste">stylesheets</div>
<div id="_mcePaste">liwei$ rails destroy scaffold Page</div>
<div>...</div>
<div></div>
<div>目前在学习Rails3，haml，scss和一些基础的东西。笔记比较零碎。对了，练习的代码都部署到heroku上了，我发现它真的好强大了。git还是不太熟，加油。</div>
<div></div>
<div>地址：<a href="http://blog-in-rails3.heroku.com" target="_blank">blog-in-rails3.heroku.com</a></div>
<div>git：http://github.com/liwei78/blog</div>
<div></div>
<div>欢迎加我的github：http://github.com/liwei78</div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/rails3%ef%bc%9arails-destroy-scaffold-page/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails 中的try方法</title>
		<link>http://railser.cn/blog/try-method-in-rails</link>
		<comments>http://railser.cn/blog/try-method-in-rails#comments</comments>
		<pubDate>Mon, 04 Oct 2010 12:47:46 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[RailsNote]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=489</guid>
		<description><![CDATA[在Rails2.3 等后续版本中可使用try方法，避免 nil 对象调用方法。 比如 user = User.find_by_id(0) user.name 必然会引起异常了，所以用try方法加以避免 user.try(:name)]]></description>
			<content:encoded><![CDATA[<p>在Rails2.3 等后续版本中可使用try方法，避免 nil 对象调用方法。</p>
<p>比如</p>
<p>user = User.find_by_id(0)</p>
<p>user.name</p>
<p>必然会引起异常了，所以用try方法加以避免</p>
<p>user.try(:name)</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/try-method-in-rails/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

