1. Git

Git是进入Ruby这个生态圈首先最应该学会的工具。几乎所有以Ruby开发出来的套件都放在Github上。也就是不管你要下载或修改协作都需要透过Git。

2. RVM

  • Ruby有很多种implementation,比较多人在使用的有
  • 标准的MRI Ruby 1.8.7
  • 标准的MRI Ruby 1.9.2
  • REE( Ruby Enterprise Edition)
  • JRuby等等

其实你用哪一种版本开发都无所谓,不过目前有一些project只能在 Ruby 1.9.2上执行。切换Ruby环境跑实验project在之前的时代是一件很痛苦的事。

所以有人发明了RVM,让开发者可以无痛的可以切换各种Ruby环境,甚至透过RVM制造出独立的Gemset环境,无负担的尽情实验新工具。

3. Mac

不可否认的开发Ruby程式,Mac是第一首选环境。

最初的原因是撰写Ruby / Rails的利器: TextMate macromates.com(原链接http://marcomates.com/已失效),Mac上的软体。而后来使用Mac开发Ruby程式的开发者越来越多,更加深这种情况,造成一些实战best practices以及友善的开发工具,几乎都以Mac为优先或唯一平台发佈,如:Pow与Homebrew。

4. Homebrew

原先在Mac上,套件管理几乎是Macports与Fink的天下。但这两者因为dependency处理不佳,加上需要sudo执行。某些时候会造成套件管理上的灾难。在OSX 10.6之后的时代,就逐渐被后起之秀Homebrew取代。

Homebrew有两大极优秀之点:

by user,不需sudo就可以安装套件。不会把档案权限搞得一团脏。

更新迅速以及乾净。Homebrew是git-based的fomula sets,透过预设的fomula安装程式

安装时如果发现有错误,可以自行修改,并透过Github的功能发pull request要求管理者patch。用Homebrew建置出来的Rails开发环境通常极为乾净且无恼人的套件bug。

( Rails developer最常会撞雷的两大套件:MySQL与ImageMagick在brew上装,几乎没什么问题…)

5. Pow

这是由37signals所开发出来的网页伺服器,可以跑任何Rack Based的网页程式。特点是,你可以把某个开发中的project,如:wiki,symlink到自己的家目录底下的.pow/资料夹。

代码:

  1. $ cd ~/.pow
  2. $ ln -s ~/projects/wiki

再打开浏览器上的 http://wiki.dev/,就可以把 projects 挂起来了。

(原理是拦截对 port 80 上的 request导回Pow)

在从前,如果你要挂上projects,通常得自己改local 的 apache conf 和 /etc/hosts 加上设定。挂起、移除、重开都非常麻烦。

而Pow的诞生,让常常追许多新玩意的开发者,实验的成本变得极度低廉。

6. Rack

Rack是一个Ruby套件,也同时是Ruby界的网页程式标准interface。背后的想法与塬理可以参考我以前写的一篇旧文Rack 与 Rack middleware。

现在只要看以Ruby开发的网站程式,几乎都支援Rack。不会再有以前哪一套框架,推荐独家使用哪一套web server跑的乱象。因为有了Pow,挂起Rack-based的网站实验程式成本也很低廉。

同时因为採用Rack架构开发的缘故,开发者可以透过Rack middleware外挂实作一些框架或程式没有的功能。

比如说:

  • rack-now-www硬是干掉网址的www
  • rack-rewrite在不支援.htaccess的环境下,直接使用rack硬rewrite routing
  • 也很自然而然的会知道:
  • 想恶搞,改config.ru
  • 想重开,touchtmp/restart.txt

这些潜规则。

7. Bundler

Bundler原先是Rails3架构师Yehuda Katz开发出来解决Rails中package dependency的工具(在开发 Merb 这个 framework时,Katz就开始尝试实作了)。

package dependency一直是相当麻烦的问题。解不开,就无法将程式boot起来。

原先大家也只有拿Bundler搭配Rails使用。

而后来Bundler也逐渐变成一般Ruby程式中预设的套件dependency管理程式。

Bundler中的Gemfile设计,不只能让开发者能够轻易的解决套件相依问题,并且可以直接引入「开发中」套件,解决3rd gem版本更新过慢,卡住自己开发进度的问题。

代码:

  1. gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git'
  2. gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git',:branch => 'stable-2'
  3. gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git',:tag => 'tag-2'
  4. gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git',:ref => '23456'

8. Guard

在开发网页程式时,开发者很常重复这样的动作:写一写 -> run test -> refresh web browser -> 继续修改 -> run test -> refresh browser这些都是很机械式的行为,非常烦人。

有没有办法只要「档案变更,就自动作事」呢?

Guard就是这样的一套工具。

有趣的是,Guard刚推出时,其实也只单纯是一套监视档案工具变动的工具,你可以透过写Guardfile,去自由监视需要监视的资料夹,再do something。而因为Guard架构算设计的不错,后来许多开发者更基于Guard做出更多其他的rubygems。

guard-livereload就是一个例子。

9. LiveReload

修改网页 => refresh browser是刚刚所提到的烦人事之一。

LiveReload提供了监视档案变动,并通知browser reload的功能。

开发者如果萤幕够大的话,可以同时开着文字编辑器与 browser,修改的任何变动马上即时显示在browser上。

值得一提的是,LiveReload在10.7 以后是broken 的。因此后来有人利用guard实作出了 guard-livereload作为替代品。

10. Sass/SCSS/Compass

自从Rails 3.1引入SCSS作为Asset Pipeline当中的选项之后,这套本来没多少开发者知道的CSS framework就开始疯狂走红。

SCSS的塬理是透过写编写「巢状」的style,取代塬本需要写CSS时需要一直复製DOM结构名称的动作。并且支援变数、数学、继承、mixin等功能…

如:SCSS

代码:

  1. $border-color: #3bbfce;
  2. $link-color: #3bbfcf;
  3. .content
  4. {   border-color: $border-color;
  5. a{color: $link-color}
  6. }

可以生成CSS

代码:

  1. .content{ border-color: #3bbfce;}
  2. .content a{color: #3bbfcf;}

而Comass是基于SCSS的Framework。提供了更进一步的许多暴力feature。

有些人可能会搞不清楚SASS / SCSS / Compass的关係。如果你有兴趣的话,可以参考我在Upgrade2Rails31这个project中写的两篇文章:Sass/SCSS以及Compass。

Ruby系列文章之1---开发者应该熟悉的10个工具的更多相关文章

  1. Ruby系列文章

    安装Ruby.多版本Ruby共存.Ruby安装慢问题 Ruby语言的一些杂项 Ruby中的常量:引号.%符号和heredoc Ruby中的数值 Ruby字符串(1):String基本用法 Ruby字符 ...

  2. 转:Java架构师与开发者提高效率的10个工具

    原文来自于:http://www.importnew.com/14624.html Java受到全球百万计开发者的追捧,已经演变为一门出色的编程语言.最终,这门语言随着技术的变化,不断的被改善以迎合变 ...

  3. Java架构师与开发者提高效率的10个工具

    Java受到全球百万计开发者的追捧,已经演变为一门出色的编程语言.最终,这门语言随着技术的变化,不断的被改善以迎合变化的市场需求. 无论你是否拥有一家科技公司,软件已经成为几乎每一个企业不可或缺的一部 ...

  4. 【Mycat】作为Mycat核心开发者,怎能不来一波Mycat系列文章?

    写在前面 Mycat是基于阿里开源的Cobar产品而研发,Cobar的稳定性.可靠性.优秀的架构和性能以及众多成熟的使用案例使得Mycat一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远. ...

  5. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

    ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...

  6. IT软件人员的技术学习内容(写给技术迷茫中的你) - 项目管理系列文章

    前面笔者曾经写过一篇关于IT从业者的职业道路文章(见笔者文:IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章).然后有读者提建议说写写技术方面的路线,所以就有了本文.本文从初学者到思想 ...

  7. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录(转)

    出处:http://www.cnblogs.com/mienreal/p/4528470.html ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视 ...

  8. C#网络编程系列文章(五)之Socket实现异步UDPserver

    原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程 ...

  9. 转】R利剑NoSQL系列文章 之 Hive

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/3/ 感谢! Posted: Jul 27, 2013 Ta ...

随机推荐

  1. Kibana6.x.x---编译源码,在执行优化任务时,报警告

    wangxuan@tryman:/home/kibana_git/kibana6.2.2$ yarn release yarn run v1.5.1 $ grunt release Running & ...

  2. 2016 ccpc 杭州 D.Difference hdu5936(折半枚举)

    有坑!!!当x==0时,因为y>0,a,b不能同时为0,所以答案要-1 #include<iostream> #include<cstdlib> #include< ...

  3. python time,random,os,sys,序列化模块

    一.time模块 表示时间的三种方式 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳 ...

  4. PIE SDK常用滤波

    1. 算法功能简介 空间域滤波实在图像空间( x. y)对输入图像应用滤波函数(核.模板)来改进输出图像的处理方法,主要包括平滑和锐化处理,强调像素与其周围相邻像素的关系,常用的方法是卷积运算. 空间 ...

  5. js中函数带不带var的本质区别是什么

    本质区别是:带var的是定义,属于statement:不带var的是赋值,属于expression.不带var时,解释器认为变量已经定义过了,会在函数中找相应的定义,如果找不到,就会认为变量是在外一层 ...

  6. 如何在DIV内只要垂直滚动条,不要水平滚动条

    <DIV style="OVERFLOW-Y: scroll; OVERFLOW-X:hidden; width: 685px; height: 180px">< ...

  7. java线程中的 sleep() wait() yield()

    sleep()方法是让线程休眠  可以指定时间  其实就是让线程进入阻塞状态  指定的时间过后 进入就绪状态  不释锁 相当于抱着锁睡觉 wait()  让线程进入等待状态  被唤醒后才会继续执行   ...

  8. Java学习第二十一天

    1:字符流(掌握) (1)字节流操作中文数据不是特别的方便,所以就出现了转换流. 转换流的作用就是把字节流转换字符流来使用. (2)转换流其实是一个字符流 字符流 = 字节流 + 编码表 (3)编码表 ...

  9. JavaScript的作用域(Scope)和上下文(Context)

    JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScrip ...

  10. sql使用自连接去重复查询

    查询公司与公司最新刷新的一条信息 select t1.userid,t1.id,t1.title,t1.RegType,t1.Salary,t1.SubjectID,t1.RefreshTime,t2 ...