<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar/3443179681250049771?origin\x3dhttp://l404.blogspot.com', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe" }); } }); </script>

Newbie On Rails

方便初学Rails的朋友们快速上手并驶入BDD敏捷之道。

Ubuntu8.10上小试Rails-AutoTest

2009年2月12日星期四

1. 下载并安装Mumbles

$ cd ~/downloads
$ wget http://nchc.dl.sourceforge.net/sourceforge/mumbles/mumbles_0.4-1_all.deb
(该版本不支持自定义图标,好在我们还可以掌控消息标题和消息内容。)

进入~/downloads目录双击文件mumbles_0.4-1_all.deb进行安装。

安装成功后启动 Mumbles,点击 应用程序 -> 附件 -> Mumbles(启动后Mumbles的图标会出现在任务栏的右边);输入:

$ mumbles-send "test title" "test message"

这会在右上角紧贴任务栏处显示一块黑底白字,停留几秒后就自动消失了;说明Mumbles已安装成功且能正常使用。

也可以把Mumbles加入到系统启动项,这样一开机Mumbles就自动运行了;如果不想加入启动项,记得测试之前必须先启动Mumbles。


2. 下载并解压ruby-dbus,可以从这里下载:https://trac.luon.net/ruby-dbus/

$ cd ~/downloads
$ wget --no-check-certificate https://trac.luon.net/data/ruby-dbus/releases/ruby-dbus-0.2.1.tar.gz
$ tar -xzvf ruby-dbus-0.2.1.tar.gz
$ cd ruby-dbus-0.2.1

查阅README文件后按指示进行安装:

$ ruby setup.rb config
$ ruby setup.rb setup
$ ruby setup.rb install

启动irb检查ruby-dbus是否安装成功:

$ irb
irb(main):001:0> require 'dbus'
=> true

返回true,即ruby-dbus安装成功且能正常使用,可以删除无用文件了。

$ rm -rf ~/downloads/ruby-dbus-0.2.1


3.创建 .autotest 文件

由于autotest这个自动测试命令基于ZenTest,所以系统需安装ZenTest这个Ruby Gem包才行;若使用 gem list 命令看不到ZenTest项可按如下方式进行安装。

$ gem install ZenTest

接下来可以在用户所在的 $HOME 目录或者项目所在的根目录创建一个 .autotest文件;

$ gedit ~/.autotest

填充如下代码(http://gist.github.com/62446):

require 'dbus'

def send_message(title, message)
begin
bus = DBus::SessionBus.instance
mumbles_service = bus.service("org.mumblesproject.Mumbles")
mumbles = mumbles_service.object("/org/mumblesproject/Mumbles")
mumbles.introspect
mumbles_iface = mumbles["org.mumblesproject.Mumbles"]
sig = mumbles_iface.signals["Notify"]
bus.emit(mumbles_service, mumbles, mumbles_iface, sig, title, message)
rescue Exception => e
end
end

Autotest.add_hook :ran_command do |at|
begin
results = at.results.last
unless results.nil?
output = results[/(\d+)\s+examples?,\s*(\d+)\s+failures?(,\s*(\d+)\s+pending)?/]
if output
failures = $~[2].to_i
end
if failures > 0
send_message("Tests Failed", "#{output}")
else
unless at.tainted
send_message("All Tests Passed", "#{output}")
else
send_message("Tests Passed", "#{output}")
end
end
end
rescue Exception => e
end
end

Ctrl+S保存并退出(该脚本暂未支持cucumber的测试结果)。


4.开始测试之旅

接下来测试一小段代码开始我们的autotest之旅。

$ cd ~/code
$ rails rails_autotest
$ cd rails_autotest
$ ./script/generate rspec
$ ./script/autospec (stop by Ctrl+Z)
$ ./script/generate rspec_scaffold post title:string
$ rake db:migrate
$ rake db:test:clone
$ ./script/autospec


相关阅读

RSpec, autotest and Snarl on Windows 自动测试完了一声吼
mumble your tests 这篇文章介绍的Mumbles修订版可以为消息提示框加上自定义的图标。
ubuntu 下 rails/rspec/autotest 自动测试环境搭建 介绍另一种更酷的Rails/autptest方法,更漂亮的效果提示框。推荐!

标签: , , ,

在Ubuntu8.10上编译安装Ruby-1.8.7-p72

2009年1月24日星期六

1. 卸载系统原apt-get安装过的Ruby及其依赖包(若系统未安装过Ruby可跳过此步骤)

$ sudo apt-get remove --purge ruby
$ sudo apt-get autoremove


2. 卸载完毕后,为Ruby构建并安装所需的依赖包

$ sudo apt-get build-dep ruby1.8


3. 下载Ruby源码包并解压

$ cd ~/downloads/
$ wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p72.tar.gz
$ tar -xvzf ruby-1.8.7-p72.tar.gz


4.下载Ruby内存泄漏的补丁包到~/downloads目录,解压后应用补丁

$ tar -xvzf ~/downloads/MBARIp72patches.tar.gz
$ ~/downloads/MBARIp72patches/apply ~/downloads/ruby-1.8.7-p72
$ cd ruby-1.8.7-p72


5. 优化编译选项

下面export开头的4句针对我本机CPU(基于Intel i686指令集)进行最佳化参数设定,Ruby源码包默认会编译成i486-linux,尽管i686向下兼容,还是物尽其用的好。

$ export DEB_BUILD_GNU_TYPE=i686-linux-gnu
$ export DEB_BUILD_GNU_CPU=i686
$ export DEB_HOST_GNU_CPU=i686
$ export DEB_HOST_GNU_TYPE=i686-linux-gnu

CFLAGS的值设置了打上补丁的编译参数,./configure --prefix指定了Ruby的安装目录。如果系统GCC编译器版本较旧,要去掉 -fno-stack-protector;如果软硬件环境都是64位,-mpreferred-stack-boundary=4才行。

$ CFLAGS="-O2 -fno-stack-protector -mpreferred-stack-boundary=2" ./configure --prefix=$HOME/programs/ruby-1.8.7-p72


6. 编译源代码,测试安装可行后执行安装

$ make
$ make test
$ make install


7. 添加到环境变量

$ gedit ~/.profile

在~/.profile文件末尾添加如下两句:

export RUBY_HOME=$HOME/programs/ruby-1.8.7-p72

export PATH=$RUBY_HOME/bin:$PATH

注销后重新登录。

若存在$HOME/bin目录也可如下创建符号链接:

$ ln -s ~/programs/ruby-1.8.7-p72/bin/* ~/bin

不推荐这种方式,因为在安装rubygems和其他gem包的时候其可执行文件会在~/programs/ruby-1.8.7-p72/bin目录创建一个副本;与其每次将该副本链接到~/bin目录还不如将~/programs/ruby-1.8.7-p72/bin目录添加到环境变量的查找路径中去。


8. 检查是否安装成功

$ ruby -v
ruby 1.8.7 (2009-1-18 MBARI 7/0x4770 on patchlevel 72) [i686-linux]

上述输出说明已成功地装上了Ruby并打上了Ruby内存泄漏的补丁包。


9. 接下来安装Ruby的软件包管理器——rubygems

$ cd ~/downloads
$ wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
$ tar -xzvf rubygems-1.3.1.tgz
$ cd rubygems-1.3.1
$ ruby setup.rb
$ gem -v
$ gem install rubygems-update
$ gem update --system


10. 清理掉无用目录

$ rm -rf ~/downloads/ruby-1.8.7-p72
$ rm -rf ~/downloads/MBARIp72patches
$ rm -rf ~/downloads/rubygems-1.3.1


相关阅读:

ruby内存泄漏的罪魁祸首 - 幽灵指针
解决ruby内存泄漏的超级大补丁发布啦
优化Debian/Ubuntu下的ruby
解决Ruby内存泄露的补丁MBARI已经开始被合并到Ruby源代码树

标签: , , , , , ,