Ruby开发者应该熟悉的10个工具

fmms 13年前
     <strong>        1. <a href="/misc/goto?guid=4958183577944756424" target="_blank">Git</a></strong>    <p> Git 是进入 Ruby 这个生态圈首先最应该学会的工具。几乎所有以 Ruby 开发出来的套件都放在 <a href="/misc/goto?guid=4958184186834948584" target="_blank">Github</a> 上。也就是不管你要下载或修改协作都需要透过 Git。</p>    <p><strong> 2. <a href="/misc/goto?guid=4958195090728906189" target="_blank">RVM</a></strong></p>    <p> Ruby 有很多种 implementation,比较多人在使用的有</p>    <p> ◆ 标準的 MRI Ruby 1.8.7</p>    <p> ◆ 标準的 MRI Ruby 1.9.2</p>    <p> ◆ REE ( Ruby Enterprise Edition)</p>    <p> ◆ JRuby 等等</p>    <p> 其实你用哪一种版本开发都无所谓,不过目前有一些 project 只能在 Ruby 1.9.2 上执行。切换 Ruby 环境跑实验 project 在之前的时代是一件很痛苦的事。</p>    <p> 所以有人发明了 RVM,让开发者可以无痛的可以切换各种 Ruby 环境,甚至透过 RVM 制造出独立的 Gemset 环境,无负担的尽情实验新工具。</p>    <p><strong> 3. <a href="/misc/goto?guid=4958195091469376350" target="_blank">Mac</a></strong></p>    <p> 不可否认的开发 Ruby 程式,Mac 是第一首选环境。</p>    <p> 最初的原因是撰写 Ruby / Rails 的利器: TextMate <a href="/misc/goto?guid=4958195092208043403" target="_blank">macromates.com</a>(原链接 <a href="/misc/goto?guid=4958195092950892186" target="_blank">http://marcomates.com/</a>已失效) ,是 Mac 上的软体。而后来使用 Mac 开发 Ruby 程式的开发者越来越多,更加深这种情况, 造成一些实战 best practices 以及友善的开发工具,几乎都以 Mac 为优先或唯一平台发佈,如:Pow 与 Homebrew。</p>    <p> <strong>4. Homebrew</strong></p>    <p> 原先在 Mac 上,套件管理几乎是 Macports 与 Fink 的天下。但这两者因为 dependency 处理不佳,加上需要 sudo 执行。某些时候会造成套件管理上的灾难。 在 OSX 10.6 之后的时代,就逐渐被后起之秀 Homebrew 取代。</p>    <p> Homebrew 有两大极优秀之点:</p>    <p> by user,不需 sudo 就可以安装套件。不会把档案权限搞得一团脏。</p>    <p> 更新迅速以及乾净。Homebrew 是 git-based 的 fomula sets,透过预设的 fomula 安装程式。</p>    <p> 安装时如果发现有错误,可以自行修改,并透过 Github 的功能发 pull request 要求管理者 patch。用 Homebrew 建置出来的 Rails 开发环境通常极为乾净且无恼人的套件 bug。</p>    <p> ( Rails developer 最常会撞雷的两大套件:MySQL 与 ImageMagick 在 brew 上装,几乎没什么问题…)</p>    <p> <strong>5. <a href="/misc/goto?guid=4958195093679150400" target="_blank">Pow</a></strong></p>    <p> 这是由 37signals 所开发出来的网页伺服器,可以跑任何 Rack Based 的网页程式。特点是,你可以把某个开发中的 project,如:wiki,symlink 到自己的家目录底下的 .pow/ 资料夹。</p>    <div class="cnblogs_code">     <pre>$ <span style="color:#0000ff;">cd</span> ~/.pow  $ ln -s ~/projects/wiki</pre>    </div>    <p> 再打开浏览器上的 <a href="/misc/goto?guid=4958195094610924635" target="_blank">http://wiki.dev/</a>,就可以把 projects 挂起来了。</p>    <p> (原理是拦截对 port 80 上的 request 导回 Pow)</p>    <p> 在从前,如果你要挂上 projects,通常得自己改 local 的 apache conf 和 /etc/hosts 加上设定。挂起、移除、重开都非常麻烦。</p>    <p> 而 Pow 的诞生,让常常追许多新玩意的开发者,实验的成本变得极度低廉。</p>    <p><strong> 6. <a href="/misc/goto?guid=4958195095363020933" target="_blank">Rack</a></strong></p>    <p> Rack 是一个 Ruby 套件,也同时是 Ruby 界的网页程式标准 interface。背后的想法与塬理可以参考我以前写的一篇旧文 Rack 与 Rack middleware。</p>    <p> 现在只要看以 Ruby 开发的网站程式,几乎都支援 Rack。不会再有以前哪一套框架,推荐独家使用哪一套 web server 跑的乱象。</p>    <p> 而因为有了 Pow,挂起 Rack-based 的网站实验程式成本也很低廉。</p>    <p> 同时因为採用 Rack 架构开发的缘故,开发者可以透过 Rack middleware 外挂实作一些框架或程式没有的功能。</p>    <p> 比如说:</p>    <p> ◆ rack-now-www 硬是干掉网址的 www</p>    <p> ◆ rack-rewrite 在不支援 .htaccess 的环境下,直接使用 rack 硬 rewrite routing</p>    <p> 也很自然而然的会知道:</p>    <p> ◆ 想恶搞,改 config.ru</p>    <p> ◆ 想重开,touch tmp/restart.txt</p>    <p> 这些潜规则。</p>    <p><strong> 7. Bundler</strong></p>    <p> Bundler 塬先是 Rails3 架构师 Yehuda Katz 开发出来解决 Rails 中 package dependency 的工具( 在开发 Merb 这个 framework 时,Katz 就开始尝试实作了)。</p>    <p> package dependency 一直是相当麻烦的问题。解不开,就无法将程式 boot 起来。</p>    <p> 塬先大家也只有拿 Bundler 搭配 Rails 使用。</p>    <p> 而后来 Bundler 也逐渐变成一般 Ruby 程式中预设的套件 dependency 管理程式。</p>    <p> Bundler 中的 Gemfile 设计,不只能让开发者能够轻易的解决套件相依问题,并且可以直接引入「开发中」套件,解决 3rd gem 版本更新过慢,卡住自己开发进度的问题。</p>    <div class="cnblogs_code">     <pre>        gem 'nokogiri', <span style="color:#800000;">:git</span> => 'git://github.com/tenderlove/nokogiri.git'          gem 'nokogiri', <span style="color:#800000;">:git</span> => 'git://github.com/tenderlove/nokogiri.git',<span style="color:#800000;">:branch</span> => 'stable-2'          gem 'nokogiri', <span style="color:#800000;">:git</span> => 'git://github.com/tenderlove/nokogiri.git',<span style="color:#800000;">:tag</span> => 'tag-2'          gem 'nokogiri', <span style="color:#800000;">:git</span> => 'git://github.com/tenderlove/nokogiri.git',<span style="color:#800000;">:ref</span> => '23456'</pre>    </div>    <p><strong> 8. Guard</strong></p>    <p> 在开发网页程式时,开发者很常重复这样的动作:写一写 -> run test -> refresh web browser -> 继续修改 -> run test -> refresh browser</p>    <p> 这些都是很机械式的行为,非常烦人。</p>    <p> 有没有办法只要「档案变更,就自动作事」呢?</p>    <p> Guard 就是这样的一套工具。</p>    <p> 有趣的是,Guard 刚推出时,其实也只单纯是一套监视档案工具变动的工具,你可以透过写 Guardfile,去自由监视需要监视的资料夹,再 do something。而因为 Guard 架构算设计的不错,后来许多开发者更基于 Guard 做出更多其他的 rubygems。</p>    <p> guard-livereload 就是一个例子。</p>    <p><strong> 9. LiveReload</strong></p>    <p> 修改网页 => refresh browser 是刚刚所提到的烦人事之一。</p>    <p> LiveReload 提供了监视档案变动,并通知 browser reload 的功能。</p>    <p> 开发者如果萤幕够大的话,可以同时开着文字编辑器与 browser,修改的任何变动马上即时显示在 browser 上。</p>    <p> 值得一提的是,LiveReload 在 10.7 以后是 broken 的。因此后来有人利用 guard 实作出了 guard-livereload 作为替代品。</p>    <p><strong> 10. Sass / SCSS / Compass</strong></p>    <p> 自从 Rails 3.1 引入 SCSS 作为 Asset Pipeline 当中的选项之后,这套本来没多少开发者知道的 CSS framework 就开始疯狂走红。</p>    <p> SCSS 的塬理是透过写编写「巢状」的 style,取代塬本需要写 CSS 时需要一直复製 DOM 结构名称的动作。并且支援变数、数学、继承、mixin 等功能…</p>    <p> 如:</p>    <p> SCSS</p>    <div class="cnblogs_code">     <pre><span style="color:#800000;">    $border-color: #3bbfce;          $link-color: #3bbfcf;          .content          </span>{<span style="color:#ff0000;">   border-color</span>:<span style="color:#0000ff;"> $border-color</span>;<span style="color:#ff0000;">             a{color</span>:<span style="color:#0000ff;"> $link-color</span>}<span style="color:#800000;">         }</span></pre>    </div>    <p> 可以生成</p>    <p> CSS</p>    <div class="cnblogs_code">     <pre><span style="color:#800000;">    .content</span>{<span style="color:#ff0000;"> border-color</span>:<span style="color:#0000ff;"> #3bbfce</span>;}<span style="color:#800000;">     .content a</span>{<span style="color:#ff0000;">color</span>:<span style="color:#0000ff;"> #3bbfcf</span>;}</pre>    </div>    <p> 而 Comass 是基于 SCSS 的 Framework。提供了更进一步的许多暴力 feature。</p>    <p> 有些人可能会搞不清楚 SASS / SCSS / Compass 的关係。如果你有兴趣的话,可以参考我在 Upgrade2Rails31 这个 project 中写的两篇文章:Sass/SCSS 以及 Compass。</p>    <p> <a href="/misc/goto?guid=4958195096122132176">原文链接</a><br />       <br />      来自: <a id="link_source2" href="http://www.rubyeye.net/bbs/forum.php?mod=viewthread&amp;tid=51&amp;extra=page%3D1" target="_blank">www.rubyeye.net</a></p>