`

Ruby on Rails之Oracle应用(1)

阅读更多

Rails 是一个易用的框架,但像任何技术一样,要精通它还需一定的时间。您可能对 Ruby on Rails 已有所耳闻,这一新应用框架正以狂风暴雨之势席卷 Web 开发社区,尤其是 J2EEPHP 编程界。

Rails 是一个功能强大的 Web 应用平台,在不到两年的时间内便赢得了众多 J2EE 和 PHP 编程人员的广泛青睐。它为什么会得到 J2EE 和 PHP 编程人员的垂青?了解 Rails 的优势后您的疑问将一扫而空。其一是它使用了严格的 model-view-controller (模式—视图—控制器)体系结构,赢得了自尊且醉心于设计模式的“妄客”(自我的技术迷)的尊敬 — 这是 J2EE 开发人员对其情有独钟的原因。其二是使用 Rails 可以非常方便地构建基础系统 — 这是它吸引 PHP 开发人员的原因。

但是,从数据库角度来看,Rails 有一些非常明显的缺陷。Rails 对数据库布局和应用程序需求作了许多假定。比如,Rails 假定所有表都使用一个非复合的主键。它不支持复合主键!另外,Rails 不支持双步提交;它只能用于单个数据库后端的情况。

本文不是 Rails 的吹捧文章或是批判文章,仅是对这一技术的一个介绍。其中既有褒奖也有批评。可能有时批判显得有点严厉(在 Rails 狂热爱好者眼中尤其如此),但是不要为表象所迷惑。使用任何 Web 应用框架都要讲究技巧,不管它是 J2EE、ASP.NET、或 PHP。从长远来看,使用 Rails 比使用其它 Web 应用开发平台的效率更高,但是需要一定的时间来熟悉和掌握该技术。

什么是 Ruby?什么是 Rails?

Ruby 是一种动态编程语言,它在许多方面类似于 PerlPython 和 Smalltalk,但是它是自成体系的。Java 和 PHP 编程人员似乎可以很轻松的掌握这一语言,他们是 Ruby 的最大拥护者。这一语言还吸引着其他人的加入,包括 Don Box 这位 Microsoft 界的超级“妄客”。

Ruby 的历史不短,它问世于 1993 年,先于在 1995 年便为公众知晓的 Java 和 PHP。所以尽管 Ruby 是一个成熟的语言,却不如其它语言普及。这造成了 Ruby 编程语言阵营并不如 Java、PHP 和 Perl 阵营强大。因此,您会发现专门针对这一语言的框架、库、书籍、网站、博客和其它资源都比较少。

在 David Heinemeier Hanson 于近期推出了 Rails 框架后,Ruby 社区推广能力不济的颓势得到了扭转,有证据表明该框架是 Ruby 诞生以来最受欢迎的应用程序。Rails 将 Ruby 编程语言扩展为极其适用于 Web 开发的领域特定语言(Domain Specific Language)。它还借用了 ActiveRecord 扩展,将对象关系持久性引入了 Ruby 语言。Rails 让人敬而远之的原因除了它不支持复合主键和两步提交外,其最大的障碍在于要使用它您需要重新学习一门编程语言。这不是大部分人可以不求甚解一略而过的阶段,学习一门新语言虽然可以为您带来欢乐,但同时却是一条令人生畏的坎坷之途。

但是,如果您想在自己的履历中添上浓墨重彩的一笔,Ruby 语言便是不二之选。梅花香自苦寒来,Ruby 是一个完全不受商业利益左右,历经 10 年锤炼而成的语言。所以,使用 Ruby 能给您带来愉悦的享受,在很多情况下,其生产率比 Java、C 和 Microsoft .NET 语言高出一个数量级。(IronPython 可能是个例外,它是 Python 语言与 Microsoft .NET 环境的接口。Python 类似于 Ruby,也是一个生产率很高的动态编程语言。)

Rails 的用途是什么?

Rails 是一个从零开始设计而成的框架,用于构建使用关系数据库后端的动态网站。它将关键词引入了 Ruby 编程语言,简化了 Web 应用程序的配置。此外,它还可以基于现有的数据库模式自动生产完整的 Web 应用程序,尽管有点粗糙。这一能力既是 Ruby 的突出优点,却同时也是它的致命弱点。Rails 假定了数据库模式命名规范,如果遵循这一规范,只需执行一个命令即可生成一个基本 Web 站点。但要完成这一工作需要进行一些额外配置,有时这些配置可能根本无法实现。您还会发现 Rail 假定的数据库规范几乎都是可更改的,但是更改得越多,该平台的生产率就越低。这就是 Rails 在开发新数据库的新应用程序时能大显神通的原因。但它却不是处理原有系统的一个上佳方案。

示例是了解使用 Rails 开发新应用程序的最好方式。如果您安装有 Oracle 数据库,且能够基于这一数据库创建新数据库和新表,那么创建一个完整的 Web 应用程序的用时将不超过 15 分钟。在本示例中,我们将使用 Ruby on Rails 来构建一个产品目录。

示例:简单的产品目录

我从去年开始投资高档漫画书,特别是 1946 年以来的旧版漫画书。我创建了一个简单的 Ruby on Rails 数据库应用程序,利用它我在买卖活动中就可来方便地插入、移除、更改和删除书籍。因为是供我个人使用,所以程序自然是能减则减。本文中要构建的应用程序是我所使用的 Ruby on Rails 应用程序的“廋身”版。

尽管 Rails 和 Oracle 数据库可用于很多平台上,但本文采用了 Windows XP,有证据表明它是 Oracle 应用程序开发人员最常用的平台之一。本示例非常简单,其实就是 “Hello World” 编程语言示例的数据库版,目的是让您初尝 Ruby,但它并没有展示 Rails 的所有能力,就像任何编程语言的“Hello World”示例都没有淋漓尽致地展示该语言的所有能力一样。

如果您在运行这一示例的过程中出现了问题,原因可能有以下三种:下载的代码不对;数据库设置不当,不能连到该示例应用程序;或者是您的 Windows XP 操作系统出现了问题。在开发本示例的过程中,我碰到了一些涉及版本和数据库配置的问题 — 所有这些都是由缺乏知识而造成的。我从我的朋友 Michael Carland 那里学到了许多知识,这样才得以顺利完成这一示例,并使之尽量简单。

实际情况是,实现 Ruby on Rails 和 Oracle 的协同工作并不是一件简单的事情。有时会让人倍感灰心。如完全按本文中的说明,您应该不会碰到问题。但是一旦超出本示例的范围,就会出问题。Rails 可以达到很高的生产率,但它是一个命令行开发环境,并不提供高级集成开发环境通常所具有的“自动化”功能。如果您不是“自力更生”型的技术人员,那目前最好不要使用 Rails。

第 1 步:设置 Oracle 数据库

如果您对结合使用 Rails 和 Oracle 不感兴趣的话,您也不会来看这篇文章,所以您需要安装一个 Oracle 数据库实例并向该数据库添加一个表。严格遵循本文中的命名规范非常重要,否则由 Rails 自动生成的代码将无法正常运行(如果不进行调整)。您要创建的表如下所述:

CREATE TABLE comics (

id, NUMBER(10) NOT NULL,

title VARCHAR2(60),

NUMBER(4),

publisher VARCHAR2(60),

PRIMARY KEY (id)

);

CREATE SEQUENCE comics_seq;

这里提供了一个 SQL 脚本文件,您可以用它来创建表并添加一些产品数据。我建议您使用它,以便您的应用程序便与这里开发的保持一致。完成这一工作最简单的方法是按照以下步骤使用 SQL*Plus。(假定您已经安装有 Oracle 数据库并知道如何使用它。)

使用 SQL*Plus,创建一个拥有 DBA 权限的用户,用于在这一应用程序中进行操作。

SQL>GRANTdbaTOrubyIDENTIFIEDBYruby; 

SQL>ALTERUSERrubyDEFAULTTABLESPACEusersTEMPORARYTABLESPACEtemp;

SQL>EXIT

使用 SQL 文件,创建应用程序表 COMICS,然后插入一些示例数据。

 C:\>sqlplusruby/ruby@rails@comics.sql 

可能您已经发现本例中创建的 COMICS 是复数形式,这似乎不太正常,因为通常我们都将表命名为单数形式(例如 COMIC)。但是,Rails 采用了复数形式来命名表。通过 Rails 配置可以更改这一默认规范,但使用复数名称更为简便。

第 2 步:安装 Ruby、RubyGems、Rails 和 Rails Oracle 库

要在 Windows XP 上使用 Rails,需要两个软件:带 RubyGems 的 Ruby 编程语言安装包,Rails 1.0 (1.1 版已于不久前推出,但本文只讨论 1.0),和 Rails Oracle 数据库库。要下载和安装带 Gems 的 Ruby 安装程序,请按以下步骤进行。

  • 访问 http://rubyinstaller.rubyforge.org/。
  • 下载“One-Click Ruby Installer”。
  • 按照说明完成安装。

安装完 Ruby 编程平台后,您就可以使用 RubyGems 这一 Ruby 应用工具很方便地安装 Ruby 框架了。要安装 Rails 应用程序开发框架,您只需打开命令行提示符,键入一个命令:

 C:\>gemsinstallrails-v1.0.0--remote 

现在您已经成功安装了 Ruby、RubyGems 和 Rails,接下来可以安装一些专用代码库,以实现 Rails 应用程序和 Oracle 数据库服务器通信。要下载和安装 Oracle Rails 库,请访问 http://rubyforge.org/projects/ruby-oci8,下载 ruby-oci8-0.1.13-mswin.r 到 C 盘中,然后在命令窗口中执行以下命令:

 C:\>rubyruby-oci8-0.1.13-mswin.rb 

假如一切顺利,到目前为此,您就完成了 Ruby、Rails 和 Rails-Oracle 连接库的安装。下一步就是创建您的第一个 Ruby on Rails Web 应用程序了。

应用程序,先要按照以下步骤创建一个新的 Rails 项目:

使用 rails 命令行<nobr oncontextmenu="return false;" onmousemove="kwM(2);" id="key2" onmouseover="kwE(event,2, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">应用</nobr>程序创建一个新项目(将自动创建新目录)。

 C:\>railscomics_catalog 

更改目录,进入前一步创建的新项目目录。

 C:\>cdcomics_catalogC:\comics_catalog>
现在您已经创建了一个新的 Rails <nobr oncontextmenu="return false;" onmousemove="kwM(6);" id="key6" onmouseover="kwE(event,6, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">项目</nobr>目录,下面您需要配置项目以让 Rails 应用程序使用 Rails-Oracle 连接库。

在您的项目目录中,有一个 config 目录,其中有一个 database.yml 文件。您需要使用文本编辑器来对 database.yml 文件进行编辑。该文件的原始内容如下:

development:adapter:mysqldatabase:

rails_developmenthost:localhostusernamerootpassword:

# Warning:The database defined as 'test' will be erased and

# re-generated from your development database when you run 'rake'.

# Do not set this db to the same as development

or production.test:adapter:mysqldatabase:

rails_testhost:localhostusernamerootpassword:

production:adapter:mysqldatabase:rails_productionhost:

localhostusernamerootpassword:

不同的数据库需要使用不同的连接属性。Rails 的默认设置适用于 MySQL,但您要重新配置该项目以使用 Oracle。按照下列步骤更改 development 属性。(您也可以更改 test 和 production 属性,但本文不讨论这些内容)

 development:adapter:ociusernameruby口令):rubyhost:RAILS 

使用 Rails 创建 Web 应用程序的方法有多种,但到目前为止最为简单的方法是使用 Rails 1.0.0 中新增的一个命令行功能,使用它可以一次构建整个应用程序。

C:\comics_catalog>rubyscript/generatescaffoldComic 
 

除了在命令行窗口中连续出现的输出外,还发生了什么呢?Rails 代码生成器创建了模型、视图和控制器 Ruby 代码来访问 COMICS 表。在本例中您使用 Rails 的 scaffold 来创建应用程序,它将为您完成所有的<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="key0" onmouseover="kwE(event,0, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">工作</nobr>。如果更改了数据库表,您需要重新运行 scaffold 命令。否则您的应用程序将无法工作。

现在您已经生成了 web 应用程序,接下来就是启动 Ruby Web 服务器 — WEBRick。

C:\comics_catalog>rubyscript/server

您可以在任何时候更改您应用程序的 Ruby 代码或 COMICS 表而无需重启 web 服务器。但是,如果您更改了<nobr oncontextmenu="return false;" onmousemove="kwM(5);" id="key5" onmouseover="kwE(event,5, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">数据</nobr>库配置文件(如 database.yml),则需要重启服务器。

现在您可以使用 Web 浏览器来访问位于您开发计算机中的 Rails Comic Catalog 应用程序。使用如下 URL:

http://localhost:3000/comics/list

浏览器应该显示一个您的目录中包含的漫画书列表,如图 1 所示。

Ruby on Rails之Oracle应用(1)(图一)

图 1:产品目录表

当您使用 scaffold 创建 Rails Web 应用程序时,它会自动创建三个 Web 组件,您可以使用这些组件来查看一个含目标数据库表所有记录的列表,以及插入、更改和删除该表中的记录。图 1 中显示了一个列表,其中包含了您在本教程<nobr oncontextmenu="return false;" onmousemove="kwM(3);" id="key3" onmouseover="kwE(event,3, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">开始</nobr>时执行 SQL 脚本而向数据库中插入的所有示例数据。

除了列表视图外,本程序还提供详情视图。点击任一“Show” 链接您就可以查看详情页,其中专门显示某一记录的数据。图 2 即是这种页面的一个示例。

Ruby on Rails之Oracle应用(1)(图二)

图 2:详情页

您还可以编辑数据库表中的任一记录。单击“Back”链接,或使用浏览器的回退按钮返回列表视图页,然后点击任一记录的“Edit”链接。图 3 显示了 COMICS 数据库表中记录之一的编辑视图示例。

Ruby on Rails之Oracle应用(1)(图三)

图 3:编辑视图

您也可以向 COMICS 表中添加新记录,先返回列表视图,单击“New Comic”链接。然后您将看到一个插入视图,它类似于图 3,只是所有域都是空白的。

分享到:
评论

相关推荐

    结合使用 Oracle 和 Ruby on Rails 教程

    Oracle是一种流行的关系型数据库管理系统,而Ruby on Rails(简称RoR)则是一个基于Ruby语言的开源Web应用框架。本教程将探讨如何将这两个强大的技术结合使用,以构建高效、可扩展的Web应用程序。 首先,让我们深入...

    在RHEL上安裝設置ROR(nginx+passenger+ruby+rails+oracle+netzke)

    在RHEL(Red Hat Enterprise Linux)系统上搭建Ruby on Rails(简称RoR)应用程序环境是一项技术性较强的任务,尤其当涉及到与其他服务如Nginx、Phusion Passenger、Ruby、Rails以及Oracle数据库集成时。以下是对这...

    使用Ruby on Rails快速开发web应用的教程实例

    Ruby on Rails 是一个使用Ruby语言编写的开源Web应用框架,其设计宗旨是使得开发Web应用更为快速和简洁。它基于著名的模型-视图-控制器(MVC)架构模式,旨在以更少的代码实现更多功能,提高开发效率。Ruby on Rails...

    rails magazine issue 4

    - **应用场景**:适用于使用Oracle数据库的Ruby on Rails开发者。 ##### 10. Ruby Kaigi Exclusive Coverage - **核心观点**:提供了关于Ruby Kaigi 2009大会的独家报道。 - **重要性**:Ruby Kaigi是Ruby社区的...

    巧用Ruby配备Oracle数据库

    在Ruby on Rails应用中,配置Oracle数据库的关键在于`config/database.yml`文件。在这个文件中,你需要定义各个环境(如development、test和production)下的数据库连接参数。例如: ```yaml development: adapter:...

    rails2.1與Oracle 連結所需gem

    Rails是Ruby on Rails框架的简称,是一个流行的开源Web应用程序框架,而Oracle则是一种企业级的关系型数据库管理系统。在Rails中,我们通常使用特定的gem来连接不同的数据库系统,对于Oracle而言,这个gem通常是`...

    jruby_on_rails

    JRuby on Rails 是一个基于 JRuby 实现的 Ruby on Rails 框架的版本,允许开发者在 Java 平台上利用 Rails 的强大功能进行 web 应用开发。Ruby on Rails(简称 Rails)是由 David Heinemeier Hansson 创建的,它是一...

    RubyonRails之Oracle应用_简易教程.doc

    总之,Ruby on Rails提供了快速开发Web应用的工具,而Oracle则提供了稳定且强大的数据库支持。虽然两者结合使用可能需要额外的配置和学习,但是一旦熟悉了这个组合,就能充分利用它们的优点,创建出高效、健壮的应用...

    Ruby on Rails是否唯一支持SQLite数据库管理?

    标题中的问题提出了一个关于Ruby on Rails (RoR)框架与SQLite数据库之间关系的常见误解。在探讨这个问题之前,我们先来了解一下这两个核心概念。 Ruby on Rails是基于Ruby编程语言的一个开源Web开发框架,它遵循...

    ruby连接oracle驱动

    ruby连接oracle驱动包,支持32位与64位操作系统 Developing applications ...Build Ruby and Ruby on Rails applications using the ruby-oci8 driver or JRuby with the Oracle Enhanced Adapter for ActiveRecord.

    oracle-js-project:JS前端和Ruby on Rails后端

    总结来说,Oracle-JS-Project结合了JavaScript的灵活性和Ruby on Rails的生产力,构建了一个全栈Web应用。开发者需要掌握前端的JavaScript框架、状态管理、打包工具,以及后端的Ruby、Rails、数据库操作和实时通信等...

    使用ROR编写ORACLE WEB应用

    标题 "使用ROR编写ORACLE WEB应用" 涉及的知识点主要集中在两个核心领域:Ruby on Rails(简称ROR)框架和Oracle数据库的集成。Ruby on Rails是基于Ruby编程语言的一个开源Web开发框架,而Oracle则是一款广泛使用的...

    university-management-system:Ruby on Rails Web应用程序可管理学生,企业和实习生

    Ruby on Rails网络应用程序,用于管理学生,企业和实习生。 该项目的历史 2013年9月:研究项目 DFHI / ISFATES的一些BBA和CS学生决定完成以下任务:分析研究所及其合作伙伴大学内部涉及大学与企业之间联系的每个...

    巧用Ruby配备Oracle数据库.doc

    在Rails中,通过修改`config/database.yml`文件,可以轻松地配置Oracle数据库连接,使得Ruby on Rails应用能够与Oracle数据库进行数据交互。同时,注意保持数据库客户端库和Ruby/OCI8驱动的兼容性,以确保稳定的数据...

    外汇源码Java-oracle-enhanced:用于ActiveRecord的Oracle增强型适配器

    应用程序访问 Oracle 数据库。 Oracle 增强型适配器可用于 2.3.x 和 6.1 之间的 Ruby on Rails 版本,并且适用于 Oracle 数据库版本 10g 及更高版本 安装 导轨 6.1 Oracle 增强型适配器 6.1 版支持 Rails 6.1。 使用...

    oracle-enhanced, ActiveRecord的Oracle enhaced适配器.zip

    oracle-enhanced, ActiveRecord的Oracle enhaced适配器 activerecord-oracle_enhanced-adapterOracle增强的ActiveRecord适配器描述Oracle增强的ActiveRecord适配器提供了来自 Ruby on Rails 应用程序的Oracl

    subsonic2.2ORM框架

    SubSonic遵循了Ruby on Rails的一些准则,比如在建表时一些约定(建议每个表都加CreatedOn[Datetime],CreatedBy[nvarchar],ModifyOn[DateTime],ModifyBy[nvarchar])....,这些详细信息可以去参考Ruby on Rails. ...

Global site tag (gtag.js) - Google Analytics