3.5开发环境<27 我的DE在哪儿 如果你是从C或者Java转向Ruby和 Rails的,也许你会想:IDE在哪儿?是啊 我们都知道,要是没有一个至少100MB的DE支持着每一次击键,我们是没法开发 一个现代化的应用程序的。对于你们这些开化的现代人,我们的建议是:请坐下来, 给自己找上一大堆框架参考文档,再加上1000页的“轻松学x××”的书—如果这 样会让你感到舒服的话 在Ruby和 Rails的世界里,没有那种面面俱到的IE(有些开发环境很类似于IDE, 但毕竟还不是)。大多数 Rails程序员都使用普通的编辑器,也不会有你想像的那么多 问题。当使用那些缺乏表达力的语言时,程序员们需要依赖IDE来进行大量的重复劳 动:代码生成、文件查找、增量编译(以便尽早发现程序中的错误),等等 当使用Ruby时,这些支持大多变成不必要的了, TextMate之类的编辑器能够提 供90%你所需的功能,但它比起那些IDE可要轻得多了。在我看来, TextMate所不能 提供的功能中唯一真正有用的,就是对重构的支持 :我比较喜欢在一个编辑器中做所有事;但也有人喜欢用不同的编辑器来处理不同的文件—例如程序代 码和HTML模板,后一类人也许应该尝试在流行的工具(例如 Dreamweaver)安装适合编写Ruby程序的插 程序的最新版本。CI可以大大增加项目的透明度,以确保项目没有偏离正轨。 编辑器 Editors 程序员们常用的编辑器都可以用来编写Ruby程序。这些年来我发现,不同的编辑器 适用于不同的语言和环境。譬如说,这一章的内容是用 Emacs写的,它的 Filladapt模式 非常方便:当我输入文字时,它会贴心地帮我格式化XML。但要开发Rail应用, Emacs 就不合适了:我用的是 TextMate。虽说选择编辑器是一件个人色彩浓重的事情,不过当 你寻找合适的 Rails编辑器时,我还是有一些建议可以给你的 支持Ruby和HIML的语法高亮,最好是支持 rhtml文件(这是 Rails使用的一种 文件格式,在HTML中嵌入了Ruby片段)。 支持Ruby源代码的自动缩进和格式重排。这不仅仅是一个审美问题:如果编辑器可 以帮你在输入代码的同时缩进程序,就可以很容易找出代码中错误的嵌套:当你对代 码进行重构或是移动代码时,支持格式重排也很重要。(只要从剪切板中把代码粘贴 到 TextMate,它就会帮你进行格式重排,这项功能会给你带来很大的便利。) Web开发敏捷之道一应用Rais进行敏捷We开发,第2版
.5 开发 我的 如呆你是从 #或者 a转向 ub y和 ai s的,也许你会怨 IDE在哪儿。走啊 我们都知道,要是没有一个至少 B的 IDE支持着每一次击键,我们是没法开发 一个现代化的应用程序的 .对于你们这些开化的现代人,我们的建议是:请坐下来 给自己找上一大堆框架参考文挡 ,再加上 l棚页的"轻松学 兴"的书一一如果 样会让你感到舒服的话 y和 i l s的世界里,没有那种面面俱到的 ID固有些开发环珑很类似于 ID 但毕竟还不是 人大多数 ai s程序员都使用普通的编辑器 ,也不会有你想像的那么多 问题.当使用那些缺乏表达力的语言时,程序员们需要依锁 IDE来进行大量的重复劳 :代码生成.文件查找、增量编译(以使尽早发现程序中的错误) .等等 当使用 y时 ,这些支持大多变成不必要的了 tMat 类 的 %你所需的功能,但它比起那些 IDE可要轻得多了 .在我看来, extMat 提供的功能中唯一真正有用的,就是对重构的 支持 . : Ji..比较喜欢在一个偏僻器中做所有亭 但也有人喜欢用不同的蝇鳞器来处理不 的主件一 如程 码和 HT L模板.后-美人也许应该尝试在 行的工具{例如 IX ea叫" 安革适 y程序的 程序的战新版本 在偏离 编辑器 Editors 序员 们常用的编辑器都可 以用 来编写 y程序 .这些年来我 不同 编辑 适用 语言和环 说, 的内 容是用 写的 ,它的 ll 常方便 入文 ,毡会贴心地帮找格式化 ML. 但~开发 i l 应用. Emacs 不合适了 :我用的是 o虽说选择编辑器是一件个人色彩浓重的事情,不过当 找合 编辑 时,我 是有 建议可 给你 by TM 语法 最好 支持 使用的 文件恪式,在 L中嵌入了 y片段) • by 源代 动缩 式重 这不 如果编辑器可 入代码 缩进程序 就可 很容 代码 错误 嵌套, 对代 码进行重构或是移动代码时,支持格式豆排也很重要. (只要从剪 板中把代码枯贴 e x \1 .它就会帮你进行格式重排,这项功能会给的带来很大的便 ) Web JfJt!if. 2道 .Ni il 061# Web JfJt J!ff
28第3章安装 Rails 支持常用Ruby和 Rails语法结构的插入。在开发的过程中你会编写很多短小的方 法,最好是只敲一两次键就让IDE帮你创建方法骨架,这样你就可以专注于编写里 面真正有意思的代码。 良好的文件浏览支持。正如你将看到的, Rails应用包含很多个文件°,你的开发环 境应该能够帮助你快速地在这些文件之间切换—你可能会在控制器中添加一行代 码,从数据库获得一个值:然后切换到视图文件,添加一行代码来显示这个值:然 后又切换到测试,添加一个测试方法来验证一切工作正常。像 Notepad这样的编辑 器只允许你用“打开文件”的方式来选择要编辑哪个文件,这样的编辑器是无法满 足要求的。就个人而言,我希望编辑器同时具备两种功能:在旁边有一个文件夹的 树状视图,让我可以根据名字找到文件;在编辑器内部具有一定的智能,知道如何 譬如说——从控制器转到与之对应的视图。 名称补全。Rail中采用的名称都比较长,一个好的编辑器允许你只敲出前几个字 符,然后通过一个快捷键提示你可能的补全方案。 我们很遗憾不能推荐所有出色的编辑器,因为我们只用过其中的一些,无疑有些人 的最爱被我们漏掉了。不过,作为一个除了 Notepad之外的起点,下面这些建议可以作 为参考。 Textmate(hTtp://macromates.com/):MacOsX上面开发Ruby/Rails的不二之 Radrails(hTtp://www.radrails.org/):集成的Rails开发环境,建立在Eclipse 平台上,可以运行于 Windows、 Mac OS X和 Linux等操作系统(该工具于2006年 被评为基于 Eclipse的最佳开源开发者工具)。 jedIt(http://www.jedit.org/):是一个功能完备的编辑器,提供了对Ruby的 支持,并且支持插件扩展 .Komodo(http://www.activestate.com/products/kOmodo/):HActivestate 开发的IDE,支持包括Ruby在内的多种动态语言。 .ArachnoRuby(http://www.ruby-ide.com/ruby/ruby_ide_and_ruby_editor php):一个商业的 Ruby IDE。 最后还有几点建议:找一位与你使用同样操作系统的、有经验的开发者,问问他用 的是什么编辑器:在最终选定一个编辑器之前,用一周左右时间试试其他的替代品;另 外,选定一个编辑器之后,尽量每天都学会使用其中的一项新功能,并以此为荣 6一个新创建的Rais应用包含44个文件,它们分布在36个目录中,而这时你还什么都没写呢… Web开发敏捷之道一应用 Rails进行敏捷Web形发,第2版
28 章 安装 支持常 ub il 插入 你会 最好是只敲一两次键就 IDE帮 建方法骨架, 这样 以专注于编写 面真正有意思的代码 览支持 i l 包含 境应 能够 助你快速地 这些 换- 可 能 制器中添 码,从数据库获得一个值:然后切换到现图文件,添加→行代码来显示这个值:然 后又 到测 ,添加 个测试方法来验证 切工作正 ot 器只允许你用 "打开文件 "的方式来选择要编辑哪个文件 ,这样的编辑器是无法满 足要 的.就 人而言 我希望 时具备两种功 有- 件夹 树状视图,让我可以根据名字找到文件:在编辑器内部具有-定的智能,知道如何 一一 如说一一从控制器转到 之对应的视图 i l 用 的 称都 个好 编辑 许你 前几个字 符, 后通 个快徒键提示你可能的补全方案 我们很遗憾不能推荐所有出色的编辑器,因为我们只用过其中的一些,无疑有些人 的最爱被我们漏掉了 .不过,作为一个除了 d之外的起点,下由句这 建议可以 • Tex tMate ( http: / /macromates . corn/ ) : Mac OS 上面开发 uby/Rai 选. • RadRails (http ://www.radrails.org/) 发环境, 建立 Ec 平台 ,可以运行 n d a c as Li n u x 等操 工具 被评为基于 cl e的直在佳开源开发者工具〉 • jEdit (http , / /www.jedit.org/) 功能完备 编辑器, 支持, 并且支持插件扩展 • Komodo ( h t t p ://www . ac t i ves t a t e . com/ Pr oduc t s/Komodo! ) :囱 ve 开发的 ID .支持包括 y在内的多种动态语 • Arachno Ruby ( http : / / www.ruby-ide .com/ruby I r uby_ i de_a nd_ r uby_ edi tor . php) by IDE. 后还有儿点建议 一位与你使用同样操作系统的、有经验的开发者 问他用 的是什么编辑器. 在最终选定-个编辑器之前,用一周左右时间试试其他的替代品:另 外, 辑器 尽最每天都 项新功能, 并以此为 一个甜剖 s应用 44个 它们 布在 6个 中, 还什 都没 Web ffJt!if il! &I !if Web ffJ
3.6Rail和数据库“29 创建你自己的 Rails AP文档 你可以自己创建一份完整的 Rails API文档,只要在命令行输入下列命令即可(如果你 使用 InstantRails或者 Locomotive,别忘了在 Rails环境中启动命令行窗口) rails_ apps> rails dummy rails_ apps> ca dummy app dummy app> rake rails: freeze: gems dummy app> echo >vendor/rails/activesupport/README dummy_ app> rake doc: rails 最后一个步骤需要花一点时间。当所有命令运行结束之后,在doc/api目录下就有了 份完整的 Rails APl文档,我建议你把这个目录移到桌面上,然后删除 dummy app目录 桌面 The Desktop 我不打算告诉你在使用Rals的时候应该如何组织你的桌面,我只想介绍我的做法。 大部分时间里,我都是在编写代码、运行测试,以及在测览器里查看我的应用程 序。所以,在我的开发桌面上总是开着一个编辑器窗口和一个浏览器窗口。此外,我时 常要察看应用程序生成的日志,所以终端窗口也总是开着,我在里面用tai1-f命令来 跟踪日志文件的最新内容。这个窗口的字体通常设得很小,这样就不必占用太多空间; 如果看到什么有趣的东西闪过,我会把字体调大来细细察看。 我还需要经常察看 Rails apl文档—在测览器里。在前面的介绍中已经提到过,用 gem server命令可以在本地运行一个we服务器,其中就有Rais的文档。这用起来很 方便,唯一令人遗憾的是:它把 Rails文档分割成了互不相关的几株文档树。如果你能 够上网,可以到htp://api. rubyonrails org去查阅Rail文档—所有的文档都放 在一个地方;如果不能上网,稍后的边栏也介绍了如何在你自己的机器上创建同样的 份文档 3.6 Rails和数据库 Rails and Databases 本书中所用的例子都用 MySQL开发(大概是50.22版本)。如果跟着我们的步伐 前进,你最好也安装一个 MySQL:不过使用别的数据库也不是什么大问题:你可能需要 对代码中直接编写的SQL稍作调整,但Rais已经很好地消除了应用程序中的大部分与 具体数据库相关的SQL。 Web开发敏捷之道一应用Rais进行敏捷Web开发,第2版
3.6 Rai 据库 2 9 创建仰自己 i l 你可以自己创建一份完整的 il API 文挡,只要在命令行输入下列命令即可{如果你 使用 tan tR 或者 Loco i l 命令 : ra ils_apps> rails dummy_dPP rails_dPPs> cd dun皿IY_4PP dun町~_app> rake r a i l s : f r e e ze : gems durm可_app> echo >vendor/rails/activesupport/READ dummy_app> rake doc:ra 一个步骤 要花 时间. 所有命今运行 o c i目 下就 ai API 又档 我建 录移 1..UlUP. pp 桌面 The Desktop 我不打算告诉你在使用 ai s的时候应该如何组织你的桌面,我只想介绍我的做法 大部分时间里,我都是在编写代码、 运行测试,以及在浏览器里 的应用程 .所以,在我的开发桌面上总是开着一个编辑器窗口和一个浏览器窗口。此 常要察看应用程序生成的日志,所以终端窗口也总是开着 在里面 跟踪日志文件的愚新内容 这个窗口的字体通常设得很小,这样就不必 用太多空间 如果看到什么有趣的东西闪过,我会把字体调大米细细察看 我还需要经常察看 API 浏 览器里 介绍 经提 e r 兮可 泌 的 方便 一令人遗憾的 z它 s文档分割成了互不相关的几株文 树。 你能 够上网,可以到 / / i l g去查阅 s文档一 所有的文 都放 一个地方:如果不能上网,稍后的边栏也介绍了如何在你自己的机器上创建同 的 文档 3.6 Rail Rails and Databases 所用的例子都用 L开 大概是 2版本 的步 前进.你最好也安装一个 ;不过使用别的数据库也不是什么大问题:你可能需要 对代码中直接编写的 L稍作调粟,但 i l 经很好地消除了应用程序中的大部分与 体数据 相关 L. Web JfJtIit 2il1· I!J il fjlitM hN
30p第3章安装Rais 数据库密码 这里有一点颇具争议的提示。生产数据库总是要设置密码的,但大部分 Rails开发 者似乎并不想费心给开发数据库设置密码——实际上,大部分人在偷懒的路上走得更 远,他们在开发中直接使用 MySQL默认的roo用户,这样做有危险吗?有人确实这 样认为,但一般来说开发机器都位于—至少理应位于—防火墙后面,而且 MySQL 还允许你设置 skip-networking选项来禁止远程访问。所以,如果你一直跟着我们的步 伐,就应该使用一个没有密码的mo用户;如果你创建了别的用户或者设置了别的密 码,就需要调整连接参数和命令行输入的命令(假如你设置了密码,就需要在连接」 MySQL时加上-p选项)。至于“如何部署安全的 MySQL生产环境”,请看 Security Focus网站上的一篇文章(htep://ww.securityfocus.com/infocus/1726), 应用程序要通过两层软件才能连接到数据库引擎。首先是数据库驱动,也就是用来 访问底层数据库的Ruby库。由于数据库的访问接口通常是用C编写的,这些Ruby驱动 库通常也是用C编写的,必须编译到你的目标环境才能使用。然后是Rals数据库适配 器,这层代码位于Ruby驱动库与应用程序之间。每个数据库驱动都有自己的一套针对数 据库的API, Rails数据库适配器将这些API的差异隐藏起来,这样 Rails应用就不必知 道自己使用的是什么数据库 在本章开始处,我们就已经安装了 MySQL驱动,这应该已经足够你学习 Rails之用 了。如果情况确实如此,请放心地翻到第32页,开始看第3.7节“保持更新” 如果你还在读这段话,说明你打算连接 MySQL之外的数据库。Rail可以与DB2、 MySQL、 Oracle、 Postgres、 Firebird、 SQL Server以及 SQLite数据库一起工作。如果你 使用 MySQL之外的数据库,须首先安装数据库驱动—这是一个Ruby库,Rals可以 通过它连接并访问你的数据库引擎。本节就要介绍如何安装数据库驱动了。 数据库驱动都是用C编写的,并且多以源码形式发布。如果你不想费劲编译源码得 到驱动程序,就请认真查看驱动的网站,很多时候作者也会同时发布编译好的二进制版 本 7不过你可能不必自己动手编译,因为经常都可以找到适用于你的平台的预先编译好的版本 Web开发敏捷之道一应用Rais进行敏捷Web开发,第2版
30 i l 数据库留码 这里有一点颇具争议的提示.生产数据库 是要设置密码的,但大部分 ai s开发 者似乎并不想费心给开友数据库设直窑码一一实际上,大部分人在偷懒的路上走得史 远,他们在开发中直接使用 L默认的 ool用尸 .这样做有危险吗9有人确实这 样认为 ,但一般来说开发机器都位于一一至少理应位于一一防火墙后面,而且 还允许你设直 n e or g选项来禁止远程访问 .所以 ,如果你一直跟着我们的步 伐,就应该使用 一个没有密码的 oot用尸 ,如果你创建了别的用户或者设置了别的密 码,就需要调整连接在数和命令行输入的命令(假如你设直了密码.就需要在连接 MySQL 加上 何部署安 ri ocu 站上 篇 文 he 巳p /www.securi汇yfocus .com/infoctis /1726 • 应用程序要通过两层软件才能连接到数据库引擎 .首先是数据库驱动 也就是用来 访问底层数据库的 y库.由于数据库的访 问接口通常是II c编写 ,这些 y驱动 库通常'也是用 C编写的,必须编译到你的目标环境才能使用飞然后是 s数据库适配 ,这层代码位于 u b y驱动阵与应用程序之间.每个数据库驱动部有自己的一套 对数 据库的 Rail 数据库适配器将这些A 异 隐藏起 Rai 就不必知 道自己使用的是付么数据库 在本章开始处,我们就已经安装了 y S L驱动 .这应该己经足够你学习 s之用 如 果悄况确实如此 翻到 如果你还在读读,这段话 ,说明你打算连接 L之外的数据库 Rail 与DB SQ racl 、P 、Fir QL Serve Lite 起工 如 果 使用 L之外的数据库.须首先安装数据w驱动一一这是一个 y库 il 通过它连接并访问你的数据库引翠.丰:节就要介绍如何安装数据库驱动了. 是用 编写 的, 并且 多 以源码形 发布。如果你不想费劲编i于源 到驱动程序,就请认真查看驱动的网站,很多时候作者也会同时发,fJj 编译好 二进和 本。 不过你可他不必自己动手蚂译,因为经常都可"找到适用 于你的平台的预克偏 的且本 Web lf6tItl il1 flJR 't~WeblfJ. !lJ2 !1N
36 Rails和数据库“31 如果实在找不到二进制版本,或者你更愿意自己编译源码,就需要在机器上安装相 应的开发环境。在 Windows平台上,这通常意味着你需要安装 Visual C+;在 Linux 上,你需要gcc和其他相关软件(不过这些东西很可能已经安装好了)。 在OSx平台上,你需要安装开发者工具(操作系统的安装包里有这套工具,不过 默认情况下是不安装的)。另外别忘了,要把数据库驱动安装在正确的Ruby版本上。在 第24页的安装步骤里,我们已经安装了自己的Ruby版本,绕过了内建的Ruby。所以, 当编译和安装数据库驱动时,千万记得把我们安装的Ruby版本放在系统路径的最前 面。我通常会用 which ruby命令来确定当前运行的Ruby不是位于/usr/bin的版本。 下面列出了Rais支持的各种数据库,并给出了各个驱动程序的首页地址。 DB2 http://raa.ruby-lang.org/project/ruby-db2 Firebird http://rubyforgeorg/projects/fireruby/ MySQL http://www.tmtm.org/en/mysql/ruby Oracle http://rubyforgeorg/projects/ruby-oc18 Postgres http://ruby.scriptingca/postgres/ SQL Server(参见表后说明) http://rubyforge.org/projects/sqlite-ruby 你可以在 Ruby-DB主页(htep:/ ruby forge.org/ projects/ ruby-ab)下载 postgres-pr, 这是一个纯Ruby编写的 Postgres驱动。 MySQL与 SQLite的驱动都可以通过 Ruby Gems下载(gem名称分别是myq1和 与 SQL Server的连接相对麻烦一些。下面的安装步骤出自 Joey Gibson-这个驱动 的作者—的笔记。 首先假设你已经通过安装程序装好了Ruby,并且也已经装好了连接 SQL Server所需 的大部分库。然而,ADO模块还没有安装。请按照下列步骤进行(感谢 Daniel Berger): 1.浏览http://ruby-abi.sourceforge.net,下载最新的Ruby-DBI源码 2.将Ruby-DB解压到一个本地目录中,进入这个目录,然后输入下列命令: c: \ruby-abi> ruby setup. rb config --withedbd_ado c: \ruby-abi> ruby setup. rb setup c: \ruby-abi> ruby setup. rb install SQL Server驱动只能在 Windows系统中工作,因为它需要依赖于win32OLE。 Web开发敏捷之道一应用Rais进行敏捷Web开发,第2版
3.6 il 和数据 如果实在找不到二进制版本 ,或者你更愿意自己编译源码,就需要在机器上安装相 开发 境.在 这通常意味着你需 C++ Linux 你需 其他 件( 不过这 可能 装好 了) • 你需要 开发 操作 包里有这套 默认情况下是不安装的 λ另外别忘了 ,要把数据库驱动安装在正确的 y版本 .在 骤里 己的 by 版本 当编译和安装数据库驱动时 ,千万记得把 们安装的 y版本放 系统路径的政 我通常会用 ruby 命令米确 u b y 于/us r/ in 下面列出 s支持的各种数据库 并给出 了各个驱动程!序的首页地剧 DB2 http : / /raa .ruby-lang .org/project /ruby-db2 Firebird tp /ruby forge .org /projects /fireru MySQL http //www.tmtm /en /mysql/ruby Oracle http : / /rubyforge . o r g/ p r o j e c t s/r u by - o c i 8 Postgres http : / /ruby.scripting . ca /postgresl SQL Server 见表后 说明〉 SQLite http : / /rubyforge .org /proj ects/sqlite-ruby 你可以在 l主页 t t // r e c t uby )下 postgr r. es ySQL SQLite 驱动都可 过RubyGems 下载 (gem 称分别 my sqlite ) 0 rv er 步骤 自Joey Gibson 的作者 一的笔 首先假设你 经通过安装 序装好了 .并且也已经装好了连接 Server 的大部分 块还 按照下 感谢 an Berger) t t ru by r c g e t. 下载局 的Ruby-DB 源码 将Ruby-DB! 个本 迸入这个 然后输入下 命令 e ,\ruby-dbi> ruby setup .rb config --with=dbd_8d c ,\ruby-dbi > ruby setup .rb setup C\ruby-dbi> ruby setup .rb install SQL erver 在Windo 工作 因 为 Win320LE Web !fJt1fJ#2窟 ,lli il fj. tJ! b!f,3