关闭

“Ruby on Rails 之 Oracle 应用”常见问题解答

标签: railsoracleruby数据库rubygemsmanager
1374人阅读 评论(0) 收藏 举报

要探究 Ruby on Rails (RoR) 吗? 此常用问题解答提供有关连接到 Oracle、安装以及创建 Oracle 数据库快捷版和 RoR 应用程序的基本信息。

目录

  1. 为什么使用 RUBY ON RAILS?
  2. 定义
  3. ORACLE 数据库连接
  4. 安装
  5. 创建应用程序

 

1. 为什么使用 RUBY ON RAILS?

可用于 Web 开发的平台有很多,包括 Microsoft 的 .Net、Java 2 企业版和 PHP。 那么为什么还对一个使用相对不熟悉的语言的新平台这么感兴趣呢?

Ruby on Rails (RoR) 的设计使您能够非常快速地开发 Web 应用程序。 它是通过遵守惯例而不是强制您预先做出所有配置决定来做到这一点的。 因此,RoR 使您可以在非常短的时间内开发出可以运行的应用程序。 安装了 Ruby 和各种所需的程序包之后,您只需运行不到六个命令和编辑一个文件 (database.yml) 就可以创建一个最小的 Web 应用程序。 Rob 包括的代码生成器或代码库可应对许多最常见的 Web 开发任务。 Ruby 语言具有 Java 等语言的面向对象的功能,但您还可以用它创建简单的脚本。 该语言的功能范围使您无需借助各种不同技术就可以提高您创建应用程序的能力。


 

2. 定义

Ruby 是什么?

Ruby 是由松本行弘 (Yukihiro Matsumoto) 创建的面向对象的解释脚本语言。 自二十世纪九十年代中期以来,它在日本广泛发展,近期作为 Rails 框架背后的语言受到关注。 该语言可用于各种功能,包括基本脚本编写、创建 Windows 应用程序以及开发 Web 应用程序。 无需具备大量 Rail 语言的知识即可开始使用 Rails;Rails 框架生成 Web 应用程序所需的基础类,并使用反射来执行到数据库的对象关系映射。

Rails 是什么?

Rails 是由 David Heinemeier Hansson 创建的一个 Web 应用程序和持久性框架。 它包括您创建数据库支持的 Web 应用程序(使用模型-视图-控制 (MVC) 模式)所需的基础架构。 作为一个可以使您快速创建功能齐备的数据库支持的 Web 应用程序的开发框架,Rails 已经受到关注。

模型-视图-控制器模式 (MVC) 是什么?

MVC 设计模式用于拆分以下有关应用程序的问题:

模型:

应用程序数据,包括验证规则

视图:

数据显示给最终用户的方式

控制器:

用户操作模型内数据的方式

MVC 已经成为 Web 应用程序开发的一个流行模式,但其很久之前就已存在了。 该模式的实施已经随时间的推移进行了改进,并且已经开发出将其作为框架实施的产品。 可以使用 Java 项目(如 Struts 和 Hibernate)开发利用 MVC 体系结构的应用程序。

在 Rails 框架中,ActiveRecord 处理和模型有关的问题。 它将数据库表映射到 Ruby 对象并提供许多其他特性,包括轻松访问数据、表示和遍历表之间的关系、验证数据以及获得数据汇总的方法。 它还允许您在需要时直接使用 SQL。

ActionController 协调视图层和模型层之间的交互(允许用户通过 Web 更改数据)。 它对发送到 Web 应用程序的所有请求进行路由,提供过滤机制、Web 会话访问以及其他特性。

ActionView 处理实际向用户显示的内容(通常在 Web 浏览器中)。 包含 HTML 和 Ruby 代码的文件都附加了 .rhtml 扩展名。 Helper 类还用于提供数据格式。

RubyGems 是什么?

RubyGems(简称 gems)是一个用于对 Rails 组件进行打包的 Ruby 打包系统。 它提供一个分发 Ruby 程序和库的标准格式,还提供一个管理程序包安装的工具。

OCI8 是什么?

Ruby/Oracle 调用接口 (OCI8) 是一个用于 Ruby/DBI 的数据库驱动程序。 RubyDBI 为 Ruby 提供一个与数据库无关的接口。 您安装 OCI8 以提供一个到底层 Oracle 客户端软件的 Ruby 接口。 这有点儿类似于 ODBC 或 JDBC。


 

3. ORACLE 数据库连接

要使用 Oracle 数据库运行 Ruby on Rails,需要安装哪些内容?

与 Oracle 数据库相集成的 RoR Web 应用程序的最小安装必须包括以下内容:

  • Oracle SQL*Plus 或 Oracle 即时客户端软件
  • Ruby
  • Gem
  • OCI8
  • Rails

Rails 安装包括一个足以进行开发和小型实施的应用程序服务器(WEBrick,即 WEB 服务器工具包)。

您可以使用自己喜欢的文本编辑器来编辑与 Web 应用程序相关联的源代码文件。

您将需要安装 Oracle 客户端或即时客户端以与 OCI8 软件一起工作。 必须用允许 Oracle 客户端软件与数据库连接的连接信息配置 TNSNAMES.ora 文件。 入门的一个好方法是下载免费的 Oracle 数据库快捷版(它将安装 Oracle 客户端和数据库)。

严格说来,运行 Rails 应用程序不需要 SQL*Plus。 有一些基于 Rails 的方法(如移植)可用于创建和维护数据库模式。

如何测试 OCI8 连通性?

要进行一个简单测试以了解您是否能够查询一个包含演示 (HR) 模式的数据库,运行以下单行代码。 输出将是一个管道分隔的文件。 确保存在 HR 模式,且该帐户已经解锁并启用。 用您的 Oracle 数据库名称(下面指定为 ORCL)和 HR 密码(下面指定为 hr_password)替换以下命令中的对应内容:

ruby -r oci8 -e "OCI8.new('hr', 'hr_password', 'ORCL').exec('SELECT * FROM jobs ORDER BY 1') do |r| puts  r.join(' | '); end"

如果连接和查询成功,输出应如下所示:

AC_ACCOUNT | Public Accountant  | 4200 | 9000 AC_MGR | Accounting Manager  | 8200 | 16000 AD_ASST | Administration  Assistant | 3000 | 6000 AD_PRES | President | 20000  | 40000 AD_VP | Administration Vice  President | 15000 | 30000 FI_ACCOUNT | Accountant |  4200 | 9000 FI_MGR | Finance Manager |  8200 | 16000 HR_REP | Human Resources  Representative | 4000 | 9000 IT_PROG | Programmer | 4000  | 10000 MK_MAN | Marketing Manager  | 9000 | 15000 MK_REP | Marketing  Representative | 4000 | 9000 PR_REP | Public Relations  Representative | 4500 | 10500 PU_CLERK | Purchasing Clerk  | 2500 | 5500 PU_MAN | Purchasing Manager  | 8000 | 15000 SA_MAN | Sales Manager |  10000 | 20000 SA_REP | Sales  Representative | 6000 | 12000 SH_CLERK | Shipping Clerk |  2500 | 5500 ST_CLERK | Stock Clerk |  2000 | 5000 ST_MAN | Stock Manager |  5500 | 8500

如何配置 Oracle TNSNAMES.ora 条目?

TNSNAMES.ora 文件是一个纯文本文件,Oracle 用它来确定连接到数据库所需的信息。 通常会在 Oracle 主目录 /network/admin 目录中找到它。 每个连接都包括服务器名(或 IP 地址)、运行 Oracle Listener 的端口以及查看的数据库的名称。

以下是该文件中可能显示的 TNS 条目的示例:

ORCL =   (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = server.company.com)(PORT = 1521))     )     (CONNECT_DATA =       (SERVICE_NAME = ORCL)     )   )

如果您使用的是 Oracle 快捷版,该文件中将显示一个名为 XE 的条目,指出您安装软件时创建的数据库。

要新建一个 TNS 条目,可以复制现有条目并相应地修改数据库名、端口号和服务器名。 根据您的安装,您也许还能够使用 Oracle Net Configuration Assistant(它提供了一个可为您编辑文件的 GUI)执行相同的任务。

Oracle Instance Client 是什么?

Oracle
即时客户端是一个软件,它允许您运行应用程序,而无需安装标准的 Oracle 客户端或拥有 ORACLE_HOME。 您可以在此处找到有关该软件的说明、下载文件并获得安装说明: http://www.oracle.com/global/cn/technology/tech/oci/instantclient/index.html

安装了 Oracle 即时客户端之后,可使用 Oracle 简单连接命名引用数据库。

Oracle 简单连接命名是什么?

如果您的 Oracle TNSNAMES.ora 中没有指定的数据库条目,则可使用简单连接命名进行连接。这使您可以仅使用一个 TCP/IP 连接字符串(由主机名、端口和服务名组成)连接到一个 Oracle 数据库。 可使用简单连接命名运行 OCI8 测试,如下所示(用适当的值替换您的密码、服务器、端口和数据库):

ruby -r oci8 -e "OCI8.new('hr',  'hr_password',  '//server.company.com:1521/orcl').exec('SELECT * FROM jobs order  by 1) do |r|  puts r.join(' | '); end"

 

4. 安装

如何安装 Rails 及其依赖项?

安装 Rails 之前,必须先安装 Ruby 和 Gems。

要安装 Rails 及其依赖项,运行以下命令:

gem install rails  --include-dependencies

Rails 需要许多 gem 才能运行。 以下是我们用于创建本常见问题解答中描述的应用程序的版本:

程序包名称 文件名(包括版本) 说明
actionmailer actionmailer-1[1].1.5.gem 电子邮件支持
actionpack actionpack-1[1].11.2.gem 控制器和视图框架
actionwebservice actionwebservice-1[1].0.0.gem Web 服务支持
activerecord activerecord-1[1].13.2.gem 对象关系映射层
activesupport activesupport-1[1].2.5.gem Rails 使用的实用程序类
Rails rails-1[1].0.0.gem 基于 Ruby 的 MVC Web 应用程序框架
Rake rake-0[1].6.2.gem Ruby 构建程序

如果您启用了防火墙,或者由于其他原因而无法访问远程 gem,您可以本地安装软件。

如果远程安装失败,如何安装 Rails 及其依赖项?

如果您的计算机启用了防火墙,或者由于其他原因导致您无法访问远程 gem,则从 http://www.rubyforge.org 下载 Rails 及其依赖项,并将它们传输到您的计算机上。 然后,可使用以下形式的命令本地安装每个 gem:

gem install <gem name up to the dash  preceding the version number>.

例如:

gem install actionmailer

如何在 Windows 操作系统上安装 Ruby on Rails?

1. 安装 Ruby

在 Windows 上安装 Ruby 相对简单: 下载适当的 Ruby 版本(我们在本文中使用 ruby182-15.exe),双击安装程序。 如果不确定要安装哪些组件,则选择 Full Install。 在任何情况下,您都将需要 RubyGems Package Manager 以继续 Rails 安装。

为确保正确安装了 Ruby 和 Gems,在命令行运行 gem list –local 以列出本地 gem。 输出应如下所示:

*** LOCAL GEMS ***  fxri (0.3.2)     Graphical interface to the RI documentation, with search engine.  fxruby (1.2.6)     FXRuby is the Ruby binding to the FOX GUI toolkit.  sources (0.0.1)     This package provides download sources for remote gem installation

Ruby on Rails 网站 (http://www.rubyonrails.org/down) 上列出了安装步骤以及到各种资源的链接。

2. 安装 Oracle 数据库连通性支持

http://www.rubyforge.org/projects/ruby-oci8 下载适用于 Oracle 的 Ruby 接口。 该软件通过标准的 Oracle 客户端软件或即时客户端在 Oracle 数据库 8、Oracle 数据库 9 或 Oracle 数据库 10 之间提供一个接口。 确保选择了 Windows 版本。 导航到包含了您下载的 Ruby 程序(截至本文撰写之日,为 ruby-oci8-0[1].1.13-mswin.rb)的目录。 运行以下命令,并在系统提示时选择 Yes:

C:>ruby ruby-oci8-0[1].1.13-mswin.rb  Copy OCI8.rb to c:/ruby/lib/ruby/site_ruby/1.8/DBD/OCI8 Copy oci8.rb to c:/ruby/lib/ruby/site_ruby/1.8 Copy oci8lib.so to c:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt OK? Enter Yes/No: Yes Copying OCI8.rb to c:/ruby/lib/ruby/site_ruby/1.8/DBD/OCI8 ... done Copying oci8.rb to c:/ruby/lib/ruby/site_ruby/1.8 ... done Copying oci8lib.so to c:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt ... done OK

3. 测试 OCI8 连通性

请参阅如何测试 OCI8 连通性?

4. 安装 Rails 及其依赖项

请参阅如何安装 Rails 及其依赖项?

5. 验证 Rails 安装

使用以下命令:

rails -–help

应当显示一条 Usage 消息,后面跟有可用的选项:

Usage: c:/ruby/bin/rails /path/to/your/app [options] . . .

如何在 Linux 上安装 Ruby on Rails?

1. 安装 Ruby

在 Linux 上安装 Ruby 需要一些额外步骤,Linux 新手可能对此并不熟悉。 下载适当的文件之后,遵循与 Windows 安装一节中描述的安装 Oracle 客户端软件、Ruby、Gems、OCI8 和 Rails(及其依赖项)相同的基本步骤。要安装 Ruby,解压缩包含 Ruby 的存档并构建 Ruby:

tar -xzvf ruby-1.8.2.tar.gz  cd ruby-1.8.2 ./configure make make install

2. 安装 Gems

要安装 Gems,解压缩包含它的存档并运行 Ruby 安装程序:

tar -xzvf rubygems-0[1].8.11.tgz cd rubygems-0.8.11 ruby setup.rb

3. 安装 OCI8

export ORACLE_HOME=<PATH TOT YOUR ORACLE_HOME> tar -xzvf ruby-oci8-0[1].1.13.tar.gz  cd ruby-oci8-0.1.13

要显示需要运行的三个步骤,调用安装程序 (ruby setup.rb) 即可,无需向其传递参数。

# ruby setup.rb No task or global option given. Typical installation procedure is:     $ ruby setup.rb config     $ ruby setup.rb setup     # ruby setup.rb install  (may require root privilege) Try 'ruby setup.rb --help' for detailed usage.

必须按顺序运行这三个选项。 要验证是否安装了 OCI8 和 Rails,遵循上面针对 Windows 列出的步骤。

4. 安装 Rails 及其依赖项

请参阅如何安装 Rails 及其依赖项?

5. 验证 Rails 安装

以下命令:

rails -–help

应当显示一条 Usage 消息,后面跟有可用的选项:

Usage: /usr/local/bin/rails /path/to/your/app [options]. . .

安装期间的错误

如何处理指示找不到 RubyGem 的错误?

如果在安装需要相关程序包的程序包之前未能成功地安装这些相关程序包,您将收到一条错误消息,如 could not find RubyGem rake (>= 0.6.2)(Gem::LoadError)

该错误的第一行列出了所需的相关程序包和版本(本示例中为 rake 0.6.2 或更高版本)。 安装相关程序包,然后进行重新安装。

如何处理指示找不到 gem 的错误?

远程安装期间,您可能会看到类似这样的错误。 如果您没有 Ineternet 访问或者启用防火墙,就可能会出现这样的错误。 如果是这样,就可能会出现大量可能的消息。例如:

Local gem file not found: rails*.gem Attempting remote installation of 'rails' Updating Gem source index for: http://gems.rubyforge.org ERROR:  While executing gem ... (OpenURI::HTTPError)     403 Forbidden

有许多选项可用,具体取决于您特定的网络配置:

  1. 如果启用了代理服务器,那么您可能能够通过 –http-proxy 选项运行 gem install。例如:
    gem install  rails –v 1.1 –http-proxy http://www-proxy.us.oracle.com:80

    然而,如果代理服务器需要进行身份验证,该方法可能会失败。

  2. 使用 –local 选项下载 gem 并进行安装。 请参阅如果远程安装失败,如何安装 Rails 及其依赖项?

如何处理指示无法解析服务名的错误?

如果您指定一个 tnsnames.ora 中不存在的 ORACLE_SID,将收到错误消息 ORA-12154: TNS:could not resolve service name (OCIError)

引发 ORA 错误的事实表明 Ruby 正在与 Oracle 客户端进行通讯。 记住,Ruby 使用 Oracle 客户端软件(即即时客户端)进行连接。 确保您的 tnsnames.ora 中具有正确的连接信息。如果您有多个 Oracle 主目录,请确保在正确的 Oralce 主目录中配置了 tnsnames.ora。

可能会发生哪些特定于 Linux 的错误?

使用 Linux 时,可能会遇到与您的环境相关的各种错误。 具体的错误取决于以下内容:您的安装、现有程序包的版本、正在使用的用户、系统上权限的设置以及环境变量(如 PATH)的设置方式。

例如,如果您运行 make install(安装 Ruby 时)时没有 root 权限,那么当您不具备对 /usr/local 中的几个目录的权限时,安装将失败。 如果一开始在 PATH 变量中指定了一个旧版本的 Ruby,gem 可能会显示错误 No such file to load — rubygems (LoadError)


 

5. 创建应用程序

使用 Oracle 时 Rails 需要哪些数据库对象惯例?

Rails 的设计意图就是使用与数据库对象有关的大量惯例。 您可以不使用这些惯例(使用原有数据库时需要这样做),但遵守这些惯例会极大地加快应用程序开发速度并产生更易于维护的代码。 以下两个惯例是 Rails 开发的基础:

  1. 表名应为复数。 表应该映射到一个同名(单数形式)的模型对象。
  2. 应为每个表创建一个名为 id 的 NUMBER 类型主键。 默认情况下,该列将作为 Rails 用来检索记录的唯一标识符。 使用 Oracle 应用程序时,创建一个使用后面跟“_seq”的表名的序列。

Rails 应用程序中的许多列名都具有特殊意义。 前面提到过,id 列充当主键。 包含相关表的 id 的列的命名格式为 <singular_form_of_table>_id。许多列可用来跟踪记录更改的日期和时间(created_at、created_on、updated_at、updated_on)。 其他列可用于对子记录进行计数、执行 Rails 控制的乐观锁定以及对数据进行分层次分类(用于列表和树)。

如何创建基本的 Rails 应用程序?

安装了软件之后,就可立即开始开发您的第一个 Web 应用程序。

1. 配置数据库

通过 SQL*Plus 连接到您要用于应用程序的数据库并创建您的数据库对象。请参阅使用 Oracle 时 Rails 需要哪些数据库对象惯例?

2. 创建 Rails Web 应用程序

导航到工作目录并创建 Rails 应用程序:

rails name_of_your_application

后续命令将运行与新建的应用程序目录相关的脚本,因此使用以下命令导航到该目录:

cd name_of_your_application

3. 配置应用程序以使用数据库

编辑位于 config 目录中的 database.yml 文件。 删除该文件的内容并用特定于 Oracle 的条目进行替换。 您的文件应如下所示:

development:   adapter: oci   host: ORCL   username: rubydev   password: rubydev  test:   adapter: oci   host: ORCL   username: rubytest   password: testpassword1  production:   adapter: oci   host: PROD   username: rubyprod   password: secure_password54

4. 创建基本的模型、视图和控制器

运行以下命令,这将根据用户模式中的表创建结构(本质上是整个框架 Web 应用程序):

ruby scriptgenerate scaffold model_name_here

用您的模型名称(表名的单数形式)替换 model_name_here。

该命令为 Web 应用程序创建了模型、视图和控制器。 模型提供一个映射到底层数据库表的对象。 控制器将提供各个视图之间的导航以及模型内的通信。 视图提供的界面允许用户创建、更新、删除和列出 products 表中的记录。

5. 测试新建的应用程序

首先,启动(附带的)Web 服务器:

ruby scriptserver

现在导航至:

http://localhost:3000/plural_of_your_model_name_here

表中记录的基本列表将显示。 例如,映射到 products 表的 product 模型可能会显示如下所示的列表:

单击链接可以显示、更新、删除或插入新记录。

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1619926次
    • 积分:19680
    • 等级:
    • 排名:第421名
    • 原创:91篇
    • 转载:1131篇
    • 译文:0篇
    • 评论:145条
    文章分类
    最新评论