[转载]Ruby on Rails之Oracle应用
<p>信息来源:<font color="#cc0000">Oracle</font></p><p style="TEXT-INDENT: 2em"><span class="boldbodycopy">Rails 是一个易用的框架,但像任何技术一样,要精通它还需一定的时间。</span></p><p /><p class="legalese"> 2006 年 4 月发表 </p><p> 您可能对 Ruby on Rails 已有所耳闻,这一新应用框架正以狂风暴雨之势席卷 Web 开发社区,尤其是 J2EE 和 PHP 编程界。 </p><p> Rails 是一个功能强大的 Web 应用平台,在不到两年的时间内便赢得了众多 J2EE 和 PHP 编程人员的广泛青睐。它为什么会得到 J2EE 和 PHP 编程人员的垂青?了解 Rails 的优势后您的疑问将一扫而空。其一是它使用了严格的 model-view-controller (模式—视图—控制器)体系结构,赢得了自尊且醉心于设计模式的“妄客”(自我的技术迷)的尊敬 — 这是 J2EE 开发人员对其情有独钟的原因。其二是使用 Rails 可以非常方便地构建基础系统 — 这是它吸引 PHP 开发人员的原因。 </p><p> 但是,从数据库角度来看,Rails 有一些非常明显的缺陷。Rails 对数据库布局和应用程序需求作了许多假定。比如,Rails 假定所有表都使用一个非复合的主键。它不支持复合主键!另外,Rails 不支持双步提交;它只能用于单个数据库后端的情况。 </p><p> 本文不是 Rails 的吹捧文章或是批判文章,仅是对这一技术的一个介绍。其中既有褒奖也有批评。可能有时批判显得有点严厉(在 Rails 狂热爱好者眼中尤其如此),但是不要为表象所迷惑。使用任何 Web 应用框架都要讲究技巧,不管它是 J2EE、ASP.NET、或 PHP。从长远来看,使用 Rails 比使用其它 Web 应用开发平台的效率更高,但是需要一定的时间来熟悉和掌握该技术。 </p><p><span class="parahead1"> 什么是 Ruby?什么是 Rails?</span> </p><p> Ruby 是一种动态编程语言,它在许多方面类似于 Perl、Python 和 Smalltalk,但是它是自成体系的。Java 和 PHP 编程人员似乎可以很轻松的掌握这一语言,他们是 Ruby 的最大拥护者。这一语言还吸引着其他人的加入,包括 Don Box 这位 Microsoft 界的超级“妄客”。 </p><p> Ruby 的历史不短,它问世于 1993 年,先于在 1995 年便为公众知晓的 Java 和 PHP。所以尽管 Ruby 是一个成熟的语言,却不如其它语言普及。这造成了 Ruby 编程语言阵营并不如 Java、PHP 和 Perl 阵营强大。因此,您会发现专门针对这一语言的框架、库、书籍、网站、博客和其它资源都比较少。 </p><p> 在 David Heinemeier Hanson 于近期推出了 Rails 框架后,Ruby 社区推广能力不济的颓势得到了扭转,有证据表明该框架是 Ruby 诞生以来最受欢迎的应用程序。Rails 将 Ruby 编程语言扩展为极其适用于 Web 开发的领域特定语言(Domain Specific Language)。它还借用了 ActiveRecord 扩展,将对象关系持久性引入了 Ruby 语言。Rails 让人敬而远之的原因除了它不支持复合主键和两步提交外,其最大的障碍在于要使用它您需要重新学习一门编程语言。这不是大部分人可以不求甚解一略而过的阶段,学习一门新语言虽然可以为您带来欢乐,但同时却是一条令人生畏的坎坷之途。 </p><p style="TEXT-INDENT: 2em">但是,如果您想在自己的履历中添上浓墨重彩的一笔,Ruby 语言便是不二之选。梅花香自苦寒来,Ruby 是一个完全不受商业利益左右,历经 10 年锤炼而成的语言。所以,使用 Ruby 能给您带来愉悦的享受,在很多情况下,其生产率比 Java、C 和 Microsoft .NET 语言高出一个数量级。(IronPython 可能是个例外,它是 Python 语言与 Microsoft .NET 环境的接口。Python 类似于 Ruby,也是一个生产率很高的动态编程语言。) </p><p><span class="parahead1"> Rails 的用途是什么?</span> </p><p> Rails 是一个从零开始设计而成的框架,用于构建使用关系数据库后端的动态网站。它将关键词引入了 Ruby 编程语言,简化了 Web 应用程序的配置。此外,它还可以基于现有的数据库模式自动生产完整的 Web 应用程序,尽管有点粗糙。这一能力既是 Ruby 的突出优点,却同时也是它的致命弱点。Rails 假定了数据库模式命名规范,如果遵循这一规范,只需执行一个命令即可生成一个基本 Web 站点。但要完成这一工作需要进行一些额外配置,有时这些配置可能根本无法实现。您还会发现 Rail 假定的数据库规范几乎都是可更改的,但是更改得越多,该平台的生产率就越低。这就是 Rails 在开发新数据库的新应用程序时能大显神通的原因。但它却不是处理原有系统的一个上佳方案。 </p><p> 示例是了解使用 Rails 开发新应用程序的最好方式。如果您安装有 Oracle 数据库,且能够基于这一数据库创建新数据库和新表,那么创建一个完整的 Web 应用程序的用时将不超过 15 分钟。在本示例中,我们将使用 Ruby on Rails 来构建一个产品目录。 </p><p><span class="parahead1"> 示例:简单的产品目录</span> </p><p> 我从去年开始投资高档漫画书,特别是 1946 年以来的旧版漫画书。我创建了一个简单的 Ruby on Rails 数据库应用程序,利用它我在买卖活动中就可来方便地插入、移除、更改和删除书籍。因为是供我个人使用,所以程序自然是能减则减。本文中要构建的应用程序是我所使用的 Ruby on Rails 应用程序的“廋身”版。 </p><p> 尽管 Rails 和 Oracle 数据库可用于很多平台上,但本文采用了 Windows XP,有证据表明它是 Oracle 应用程序开发人员最常用的平台之一。本示例非常简单,其实就是 “Hello World” 编程语言示例的数据库版,目的是让您初尝 Ruby,但它并没有展示 Rails 的所有能力,就像任何编程语言的“Hello World”示例都没有淋漓尽致地展示该语言的所有能力一样。 </p><p> 如果您在运行这一示例的过程中出现了问题,原因可能有以下三种:下载的代码不对;数据库设置不当,不能连到该示例应用程序;或者是您的 Windows XP 操作系统出现了问题。在开发本示例的过程中,我碰到了一些涉及版本和数据库配置的问题 — 所有这些都是由缺乏知识而造成的。我从我的朋友 Michael Carland 那里学到了许多知识,这样才得以顺利完成这一示例,并使之尽量简单。 </p><p> 实际情况是,实现 Ruby on Rails 和 Oracle 的协同工作并不是一件简单的事情。有时会让人倍感灰心。如完全按本文中的说明,您应该不会碰到问题。但是一旦超出本示例的范围,就会出问题。Rails 可以达到很高的生产率,但它是一个命令行开发环境,并不提供高级集成开发环境通常所具有的“自动化”功能。如果您不是“自力更生”型的技术人员,那目前最好不要使用 Rails。 </p><p style="TEXT-INDENT: 2em">第 1 步:设置 Oracle 数据库</span /> </p><p> 如果您对结合使用 Rails 和 Oracle 不感兴趣的话,您也不会来看这篇文章,所以您需要安装一个 Oracle 数据库实例并向该数据库添加一个表。严格遵循本文中的命名规范非常重要,否则由 Rails 自动生成的代码将无法正常运行(如果不进行调整)。您要创建的表如下所述: </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>CREATE TABLE comics (<br />id,NUMBER(10) NOT NULL,<br />titleVARCHAR2(60),<br /> NUMBER(4),<br />publisherVARCHAR2(60),<br />PRIMARY KEY (id)<br />);<br />CREATE SEQUENCE comics_seq;</pre></td></tr></tbody></table></ccid_nobr /></center></pre><p> 这里提供了一个 SQL 脚本文件,您可以用它来创建表并添加一些产品数据。我建议您使用它,以便您的应用程序便与这里开发的保持一致。完成这一工作最简单的方法是按照以下步骤使用 SQL*Plus。(假定您已经安装有 Oracle 数据库并知道如何使用它。) </p><p> 使用 SQL*Plus,创建一个拥有 DBA 权限的用户,用于在这一应用程序中进行操作。 </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>SQL> GRANT dba TO ruby IDENTIFIED BY ruby;<br />SQL> ALTER USER ruby DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;<br />SQL> EXIT</pre></td></tr></tbody></table></ccid_nobr /></center></pre><p> 使用 SQL 文件,创建应用程序表 COMICS,然后插入一些示例数据。 </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>C:\> sqlplus ruby/ruby@rails @comics.sql</pre></td></tr></tbody></table></ccid_nobr /></center></pre><p> 可能您已经发现本例中创建的 COMICS 是复数形式,这似乎不太正常,因为通常我们都将表命名为单数形式(例如 COMIC)。但是,Rails 采用了复数形式来命名表。通过 Rails 配置可以更改这一默认规范,但使用复数名称更为简便。 </p><p><span class="boldbodycopy"> 第 2 步:安装 Ruby、RubyGems、Rails 和 Rails Oracle 库</span> </p><p> 要在 Windows XP 上使用 Rails,需要两个软件:带 RubyGems 的 Ruby 编程语言安装包,Rails 1.0 (1.1 版已于不久前推出,但本文只讨论 1.0),和 Rails Oracle 数据库库。要下载和安装带 Gems 的 Ruby 安装程序,请按以下步骤进行。 </p><ol><li>访问 [url]http://rubyinstaller.rubyforge.org/[/url]。 </li><li>下载“One-Click Ruby Installer”。 </li><li>按照说明完成安装。 </li></ol><p style="TEXT-INDENT: 2em">安装完 Ruby 编程平台后,您就可以使用 RubyGems 这一 Ruby 应用工具很方便地安装 Ruby 框架了。要安装 Rails 应用程序开发框架,您只需打开命令行提示符,键入一个命令: </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>C:\> gems install rails -v 1.0.0 --remote</pre></td></tr></tbody></table></ccid_nobr /></center></pre><p> 现在您已经成功安装了 Ruby、RubyGems 和 Rails,接下来可以安装一些专用代码库,以实现 Rails 应用程序和 Oracle 数据库服务器的通信。要下载和安装 Oracle Rails 库,请访问 [url]http://rubyforge.org/projects/ruby-oci8[/url],下载 ruby-oci8-0.1.13-mswin.r 到 C 盘中,然后在命令窗口中执行以下命令: </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>C:\> ruby ruby-oci8-0.1.13-mswin.rb</pre></td></tr></tbody></table></ccid_nobr /></center></pre><p> 假如一切顺利,到目前为此,您就完成了 Ruby、Rails 和 Rails-Oracle 连接库的安装。下一步就是创建您的第一个 Ruby on Rails Web 应用程序了。 </p><p><span class="boldbodycopy"> 第 3 步:创建 Web 应用程序</span> </p><p> 要创建一个新的 Rails 应用程序,先要按照以下步骤创建一个新的 Rails 项目: </p><p>使用 rails 命令行应用程序创建一个新项目(将自动创建新目录)。 </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>C:\> rails comics_catalog</pre></td></tr></tbody></table></ccid_nobr /></center></pre><p> 更改目录,进入前一步创建的新项目目录。 </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>C:\> cd comics_catalog<br />C:\comics_catalog></pre></td></tr></tbody></table></ccid_nobr /></center></pre><p> 现在您已经创建了一个新的 Rails 项目目录,下面您需要配置项目以让 Rails 应用程序使用 Rails-Oracle 连接库。 </p><p> 在您的项目目录中,有一个 config 目录,其中有一个 database.yml 文件。您需要使用文本编辑器来对 database.yml 文件进行编辑。该文件的原始内容如下: </p><p><table class="bodycopy" cellspacing="0" cellpadding="7" border="1"><tbody><tr><td><pre>development:adapter:mysqldatabase:rails_developmenthost:localhostusernamerootpassword: </pre><pre># Warning:The database defined as 'test' will be erased and# re-generated from your development</pre><pre> database when you run 'rake'.# Do not set this db to the same as development or production.test:</pre><pre>adapter:mysqldatabase:rails_testhost:localhostusernamerootpassword:production:adapter:mysqldatabase:rails_productionhost</pre><pre>:localhostusernamerootpassword:</pre></td></tr></tbody></table></p><p style="TEXT-INDENT: 2em">不同的数据库需要使用不同的连接属性。Rails 的默认设置适用于 MySQL,但您要重新配置该项目以使用 Oracle。按照下列步骤更改 development 属性。(您也可以更改 test 和 production 属性,但本文不讨论这些内容) </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>development:<br />adapter:oci<br />usernameruby<br />口令):ruby<br />host:RAILS </pre></td></tr></tbody></table></ccid_nobr /></center></pre><p> 使用 Rails 创建 Web 应用程序的方法有多种,但到目前为止最为简单的方法是使用 Rails 1.0.0 中新增的一个命令行功能,使用它可以一次构建整个应用程序。 </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>C:\comics_catalog> ruby script/generate scaffold Comic </pre></td></tr></tbody></table></ccid_nobr /></center></pre><p> 除了在命令行窗口中连续出现的输出外,还发生了什么呢?Rails 代码生成器创建了模型、视图和控制器 Ruby 代码来访问 COMICS 表。在本例中您使用 Rails 的 scaffold 来创建应用程序,它将为您完成所有的工作。如果更改了数据库表,您需要重新运行 scaffold 命令。否则您的应用程序将无法工作。 </p><p> 现在您已经生成了 web 应用程序,接下来就是启动 Ruby Web 服务器 — WEBRick。 </p><pre><center><ccid_nobr /><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre>C:\comics_catalog> ruby script/server</pre></td></tr></tbody></table></ccid_nobr /></center></pre><p>您可以在任何时候更改您应用程序的 Ruby 代码或 COMICS 表而无需重启 web 服务器。但是,如果您更改了数据库配置文件(如 database.yml),则需要重启服务器。 </p><p> 现在您可以使用 Web 浏览器来访问位于您开发计算机中的 Rails Comic Catalog 应用程序。使用如下 URL: </p><p> [url]http://localhost:3000/comics/list[/url]</p><p> 浏览器应该显示一个您的目录中包含的漫画书列表,如图 1 所示。 </p><center>[img]http://database.ccidnet.com/col/attachment/2006/4/681175.jpg[/img]</center><center><br /><strong>图 1:</strong>产品目录表 </center><center><center><p style="TEXT-INDENT: 2em">当您使用 scaffold 创建 Rails Web 应用程序时,它会自动创建三个 Web 组件,您可以使用这些组件来查看一个含目标数据库表所有记录的列表,以及插入、更改和删除该表中的记录。图 1 中显示了一个列表,其中包含了您在本教程开始时执行 SQL 脚本而向数据库中插入的所有示例数据。 </p><p> 除了列表视图外,本程序还提供详情视图。点击任一“Show” 链接您就可以查看详情页,其中专门显示某一记录的数据。图 2 即是这种页面的一个示例。 </p><center>[img]http://database.ccidnet.com/col/attachment/2006/4/681173.jpg[/img]<br /><strong>图 2:</strong>详情页 </center><p> 您还可以编辑数据库表中的任一记录。单击“Back”链接,或使用浏览器的回退按钮返回列表视图页,然后点击任一记录的“Edit”链接。图 3 显示了 COMICS 数据库表中记录之一的编辑视图示例。 </p><center>[img]http://database.ccidnet.com/col/attachment/2006/4/681175.jpg[/img]<br /><strong>图 3:</strong>编辑视图 </center><p> 您也可以向 COMICS 表中添加新记录,先返回列表视图,单击“New Comic”链接。然后您将看到一个插入视图,它类似于图 3,只是所有域都是空白的。 </p><span class="parahead1"> 精通 Rails</span> <p> Product Catalog 示例展示了使用 Rails 可以很方便地创建一个极其简单的表,但是这个表除用于跟踪库存外在其它方面并没有很大的用处。您可以使用 Rails 创建复杂得多的 Web 应用程序,但这需要您花费一定的精力来研究和揣摩代码。Rails 是一个易用的框架,但像任何技术一样,要精通它还需一定的时间。这里,我只建议正进行全新应用程序开发,通晓技术的人员和开发团队使用 Rails。对于在此之外的,建议您等其成熟后再使用。 </p><p> 要真正精通 Rails,建议您阅读一本书,虽然今年稍后会有一系列书涌现,但目前市面上现有的一本优秀著作是 <em>Agile Web Programming with Ruby on Rails </em>,该书由 David Heninmier Hanson 和 Dave Thomas 合著完成,由 Pragmatic Bookshelf 在 2005 年出版。Hanson,众所周知,是 Rails 之父,而 Thomas 则参与了 <em>Programming Ruby:The Pragmatic Programmers' Guide</em>(Pragmatic Bookshelf,第 2 版,2004)一书的编撰。<br /></p></center></center>页:
[1]
