欢迎投稿

今日深度:

从Ruby on Rails连接到Oracle(1)

从Ruby on Rails连接到Oracle(1)


在使用 Java 时,有两种针对 Oracle 的常见驱动程序:纯 Java 又叫做瘦)驱动程序和原生 OCI 驱动程序。在写作这篇文章的时候,还没有和基于 JDBC 的 Java 瘦驱动程序类似的纯 Ruby 驱动程序。

要连接到 Oracle,用户必须安装 Ruby/Oracle 调用接口 (OCI8) 库 — 一个基于 Ruby/DBI 数据库接口模块)的数据库驱动程序。RubyDBI 提供了一个与数据库无关的、类似于 JDBC 或 ODBC 的接口,来实现 Ruby 和数据库之间的交互。Ruby OCI8 驱动程序通过标准的 Oracle 客户端软件连接到 Oracle 8 到 10 的所有版本。OCI8 是一个 Ruby 包装器,用本地 C 代码编写,实际的交互就由它来完成。

非 windows 开发人员可以通过输入 sudo gem install ruby-oci8 来进行安装。Windows 开发人员可以先从www.rubyforge.org/projects/ruby-oci8 上下该载驱动程序的二进制版本,然后手动安装:

ruby ruby-oci8-0.1.16-mswin32.rb

可以通过下面的命令行 Ruby 程序查询一个包含演示 (HR) 模式的数据库,简单检测您所下载的 Ruby OCI8 驱动程序。替换下面命令中 Oracle 数据库的名称和口令:

set oracle_sid=xe
ruby -r oci8 -e "OCI8.new('hr', 'password').exec('SELECT * FROM jobs ORDER BY 1')
 {|r| puts  r.join}"
 
如果连接和查询成功,输出应如下所示:

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

Rails 配置

Rails 用于连接到数据库的参数存放在您的 Rails 应用程序目录中的 config/database.yml 中。下面的例子引用了主机 xe,它对应 tnsnames.ora 中的一项。使用了三种模式,分别用不同的用户名指定。

development:
adapter:oci
host:xe
username:development
password:password
test:
adapter:oci
hostxe
username:test
password:password
production:
adapter:oci
host:xe
username:production
password:password

也可以将 Oracle Easy Connect Naming 和 Ruby OCI8 驱动程序结合使用。用一个 Oracle Easy 连接字符串替换主机字段中的 SID,如下所示:

development:
adapter:oci
host://server:port/instance_name
username:development
password:password

身份验证

和大多数的三层应用程序体系结构一样,Rails 假设使用一套证书在 database.yml 中指定)对 Oracle 进行身份验证。指定的证书必须有足够的权限来执行 Rails 应用程序的任何操作。

如果出于安全的考虑,不想把证书以明文的形式包含在配置文件中,您可以利用 database.yml 允许通过 ERb 标记使用动态内容的特性。语法与使用 <%= %>标记将参数值插入 Rails 视图模版的语法相同。

下面的例子从启动时设置的环境变量中获取用户名和口令:

production:
adapter:oci
host:xe
username:<%= ENV['ORACLE_USERNAME'] %>
password:


www.htsjk.Com true http://www.htsjk.com/shujukukf/17268.html NewsArticle 从Ruby on Rails连接到Oracle(1) 在使用 Java 时,有两种针对 Oracle 的常见驱动程序:纯 Java 又叫做瘦)驱动程序和原生 OCI 驱动程序。在写作这篇文章的时候,还没有和基于 JDBC 的 Java 瘦驱动...
评论暂时关闭