【IT168 技术文档】随着 IBM_DB 适配器和驱动程序的引入,Rails 应用程序现在可以无缝地与 IBM 数据服务器进行交互。本文是DB2 with Ruby on Rails 系列的第一篇文章。文中介绍了 Starter Toolkit for DB2 on Rails,谈到了安装 IBM_DB 驱动程序的多种方法以及使用 DB2 的 Rails 迁移。
Ruby on Rails 发布于 2004 年,如今已快速成为 Web 应用程序开发中最流行的框架之一。这个开放源代码项目又名 Rails 或 RoR,它采用 Model-View-Controller (MVC) 架构和 Ruby 面向对象脚本编制语言,并遵循一些简单的原则,例如 “约定优于配置(convention over configuration)” 和 “不要重复自己(don't repeat yourself)”。因此,开发人员可以更快、更容易地构建应用程序,减少冗余的代码和配置文件,同时又能灵活地创建定制的扩展,以满足应用程序需求。通过对数据库持久性的支持,可以使用数据库服务器和内置的 WEBrick Web 服务器快速开发使用这种框架的 Web 应用程序。
随着 RubyForge 社区门户上开始提供 IBM_DB Rails 适配器和 Ruby 驱动程序,Ruby on Rails 框架经过官方测试,并且在所有 DB2 数据服务器上受支持。对于你们当中某些人来说这也许是个惊喜,社区还有一个免费版本的名为DB2 Express-C的 DB2 9 数据库可以使用。DB2 Express-C 数据服务器的开发、部署和分发是免费的,没有大小、时间或用户方面的限制,而且还包括了Starter Toolkit for DB2 on Rails。这个包可以帮助开发人员在使用 DB2 的 RoR 环境中快速、轻松地设置和构建 Web 应用程序。
虽然在 Rails 框架中可以配置的数据存储有很多种,但 DB2 数据服务器可以带来一些独特的、突出的优点。由于 DB2 9 中引入了 pureXML™,使用 IBM 数据服务器的首要优点是,IBM_DB 适配器和驱动程序支持本地 XML 数据类型。
目前有两种方法可以设置使用 DB2 的 Rails 开发环境。如果您对 DB2 环境不熟悉,那么可以借助 Starter Toolkit for DB2,这是开始进行 DB2 on Rails 应用程序开发的最方便的方式。Starter Toolkit version 2.1 可以从alphaWorks下载,其中还有一个稍旧版本的 IBM_DB 适配器的安装程序。这个版本不支持 i5 和 zOS 平台上的 DB2,但是更新工作正在进行,很快就会有新版本可供下载。
在 IBM_DB 适配器和驱动程序 gem 及插件发布之后,如果要在一个已有的 DB2 环境中开发 Rails 应用程序,那么可以使用 “manual” 选项,这个选项使用起来同样也很轻松。请参阅RubyForge rubyibm project获得最新版本(从 4 月 30 日起,Production/Stable release 0.6.0 已经可用)。
首先下载和配置 DB2 Express-C 数据服务器和 Rails 运行时环境。最新版本的 IBM_DB 适配器和驱动程序要求使用 DB2 9,FixPack 2 或 DB2 8,FixPack 15。为了下载和配置 DB2 Express-C 数据服务器和 Rails 运行时环境:
- 访问以下网站,并下载DB2 Express-C 9 FixPack 2。
- 下载One-click Ruby Installer(包含 Ruby 和 Rubygems)。
-
安装Rails gem 及其依赖项:
gem install rails --include-dependencies
将 IBM_DB 适配器和驱动程序安装为 Ruby gem,与 Rails plugin 比较
为了帮助理解 Ruby gem 安装与 Rails plugin 安装之间的区别,下面简要描述一下运行时环境。
RubyGems是用于 Ruby 运行时环境中的库和应用程序的标准打包和安装框架。对于每个 bundle,在一个中央存储库中会发布并存储一个遵从打包格式的名为 gem 的文件,以允许同时部署同一个库或应用程序的多个不同的版本。与 Linux 发布打包管理和 bundle(.rpm、.deb)类似,通过gem终端用户实用程序也可以查询、安装、卸载和操作这些 gem。gem 实用程序可以无缝地查询远程 RubyForge 中央存储库,并且可以查找和安装任何已有的能使 Rails 开发人员更轻松的实用程序。安装了 IBM_DB gem 之后,马上便可以在 Ruby 运行时环境中通过以下命令从任何脚本(和应用程序)中访问其功能:
- require 'rubygems'
- gem 'ibm_db' (在 Rubygems 0.9 中,require_gem已经不赞成使用,而被gem替代)
作为一个 ActiveRecord 适配器,在 Rails 框架中使用它之前,IBM_DB gem 需要由抽象适配器注册到它的RAILS_CONNECTION_ADAPTERS(active_record.rb) 列表中。注册之后,会加载 IBM_DB gem 和它的依赖项(ibm_db Ruby driver、IBM Driver for ODBC 和 CLI)。这样便使得 Ruby 环境中的任何应用程序,包括 Rails,可以与 IBM 数据服务器交互。正如 IBM_DB gem README 文件中描述的那样,每过几个简单的步骤,就要启用 Ruby 运行时,以访问 IBM 数据服务器。
将 IBM_DB 适配器和驱动程序安装为 Ruby Gem
-
发出gem命令,安装 IBM_DB 适配器和驱动程序:
D:\>gem install ibm_db
-
将 ‘ibm_db’ 注册到 Rails 框架中的连接适配器列表中。
将ibm_db手动添加到gems\1.8\gems\activerecord-1.15.3\lib\active_record.rb:
RAILS_CONNECTION_ADAPTERS = %w( mysql postgresql sqlite ... ibm_db )
Rails 插件为该框架自身提供了扩展机制。通过这种机制,Rails 可以在一个特定的 Rail 应用程序范围内扩展其功能。因此,当 Ruby 运行时环境中没有部署 IBM_DB gem 时,这提供了另一种访问 IBM 数据服务器的方法。虽然 Rails 插件没有提供特定于 Ruby gem 的版本管理,但是它们提供了一种有用的初始化机制,该机制允许 IBM_DB 插件在其初始化期间自己插入到 Rails 注册表中。因此,在应用程序中以插件形式安装 IBM_DB 之后,无需任何手动步骤,就可以让 Rails 框架加载它。正如 IBM_DB 插件 README 文件和 RubyForge 上的rubyibm 项目文档中描述的那样,只需注册插件源,并运行 Rails 应用程序安装脚本,就可以启用 Rails 应用程序,以便进行 IBM 数据服务器访问。虽然 RubyForge 可以启用到 Subversion (SVN) 库的 HTTP 访问(目前只支持 SVN 协议),在 Windows 上安装 Rails 插件时,仍然需要一个 SVN 客户机。在大多数 Linux® 和 UNIX® 发行版上,SVN 客户机是默认提供的,这使得 IBM_DB 插件安装具有很好的无缝性。