DB2 与 Ruby on Rails 入门之一(2)
客户机环境
IBM_DB 适配器(ibm_db_adapter.rb)对 ibm_db 驱动程序存在直接依赖,它利用 IBM Driver for Open Database Connectivity (ODBC) and Call Level Interface (CLI) 连接到 IBM 数据服务器。 IBM CLI 是 IBM 数据服务器的可调用 SQL 接口,它遵从 ODBC。
对于 IBM_DB 适配器和驱动程序还有一些额外的注意事项。
1、IBM Driver for ODBC 和 CLI 的安装必需满足 IBM_DB 需求。
可以通过完全安装 DB2 数据库获得 IBM Driver for ODBC 和 CLI,也可以从 “IBM DB2 Driver for ODBC and CLI overview” 中单独获得这两个组件。
2、可以使用 CLI 关键词在任何 Ruby 应用程序之外修改驱动程序行为。
可以使用一些 CLI 关键词在 Rails 应用程序之外修改某些事务行为。例如,可以使用它们来设置当前模式或者修改一些事务元素,例如关闭自动提交行为。
3、诊断信息的收集需要 CLI driver 跟踪实用程序。
由于通过 IBM_DB driver 的所有请求都是使用由 IBM Driver for ODBC 和 CLI 提供的 API 实现的,CLI 跟踪是识别使用 IBM_DB 适配器和驱动程序的应用程序中的问题的重要机制。
CLI 跟踪捕捉应用程序向 IBM driver for ODBC 和 CLI 发出的所有 API 调用(包括所有输入参数),并捕捉驱动程序返回给应用程序的所有值。它是设计用来捕捉应用程序如何与 IBM driver for ODBC 和 CLI 交互的一种接口跟踪,并提供关于驱动程序内部工作的信息。
数据库模式的变更
在一个多变的环境中,应用程序需要动态地做出调整,以解决新的需求和挑战。当应用程序开发人员更改他们的应用程序时,例如添加一个新的对象或类,就需要修改底层持久性,以确保数据库与应用程序同步。更改数据库模式的传统方法是生成新的 SQL 脚本。但是,通过 SQL 脚本难于按版本依次保存应用程序和数据库。而且,数据库开发人员很少构建 SQL 脚本来逆转数据库模式中做出的与应用程序更改相关联的更改。在大多数开发环境中,更改是通过删除所有数据库对象,并使用之前版本的 SQL(DDL)脚本重新创建它们来逆转的。
对于很多 Web 开发人员来说,在 Rails 上的主要发现是其内置的对通过迁移来变更模式的支持。虽然数据库开发人员肯定更倾向于通过 DDL 或数据操作语言(DML)使用 SQL,但大多数应用程序开发人员更乐意坚持使用他们的工具:Ruby 语言和它的库。这正是 Rails 通过迁移提供的东西:一个简单而有效的基础设施,它利用 ActiveRecord 抽象按版本依次创建和修改数据库对象,例如表和列。通过 Rails 迁移完成模式变更这一主要的数据库管理任务。Rails 框架简化了开发,但是相关的工具(rake 任务)在驱动数据库更改和使应用程序代码与表结构同步方面也非常有效。
使用 Rails 迁移进行 DB2 模式变更
Ruby on Rails 迁移可以解决前面描述的涉及数据库和数据结构更改的一些问题。现在,让我们看看 Rails 迁移如何为数据库模式变更提供帮助。
我们来考察一个 Rails 迁移的例子,该例子使用 IBM_DB 适配器,并尝试一些与 Rails 应用程序变更相关的数据库对象更改。 但是,首先需要确保像前面描述的那样安装和配置了 DB2 on Rails 开发环境。
我们的例子将尝试构建一个 Team Room,这是一个托管应用程序,它使注册的成员可以共享文本或二进制格式的各种文档,包括图像、可执行文件和任何其他媒体。另外还包括被共享的 XML 文档,因为通过 pureXML 数据类型很容易将它们本地存储在 DB2 9 中。这个例子还将发现利用 XML 文档内置层次结构的一些好方法。
1、首先,创建一个名为 “teamroom” 的 Rails 项目:
清单 1. 创建 Team Room Rails 项目
Rails 框架自动生成该项目的目录结构。从这里开始,我们假设是在 D:\rails\teamroom 目录中,此后提到的所有路径都是 Team Room 项目目录下的相对路径。
2、如果已经有一个 DB2 数据库,那么可以忽略这一步,直接进入步骤 3,开始配置数据库连接。
Rails 项目和数据库
不需要为每个 Rails 项目创建一个新的数据库。这里没有那种一对一映射的需求。
预计可能需要在本地将 XML 存储在 DB2 中,因此让我们使用 UTF-8 编码集创建 XMLDB 数据库。这里必须使用 UTF-8 编码集,以便在 DB2 表中定义 XML 列。
在 DB2 Command Line Processor 中,运行以下命令:
清单 2. 创建 XMLDB 数据库
db2 create db xmldb using codeset utf-8 territory us
3、现在编辑 D:\rails\teamroom\config\database.yml 文件,以建立到 DB2 9 XMLDB 数据库的连接。
清单 3. 编辑 database.yml 文件
下面的表中解释了 DB2 的每个连接属性:
表 1. 可用于 database.yml 的 DB2 连接属性 注 5:只有当没有可用的 DB2 编目信息,且没有在用于 DB2 CLI 的 db2cli.ini 配置文件中注册数据源时,与远程 TCP/IP 连接相关的可选连接属性 host 和 port 才是必需的。在使用 IBM Driver for ODBC 和 CLI,而不是本地安装的完整的 DB2 Client 的情况下,就可能出现这种类型的设置。
连接属性
描述
是否必需
Adapter
Ruby 适配器名称,对于 DB2 为 ‘ibm_db’
是
Database
Rails 项目所连接到的数据库
是
Username
用于连接到 DB2 数据库的用户 ID
是
Password
指定的用户 ID 的密码
是
Schema
命名对象的集合。模式提供了在数据库中在逻辑上组织对象的方式。在这个例子中,我们将 Rails Team Room 项目的所有数据库对象组织在 ‘teamroom’ 数据库模式之下。这样便允许多个 Rails 项目共享一个数据库
可以将默认模式设置为当前会话用户的授权 ID(见注 4)
Application
当使用 DB2 Connect 时,用于标识客户机应用程序名称的一个字符串被发送至主机数据库服务器。在 DB2 Connect 上,发出 ‘db2 list applications’ 后将显示 ‘application’ 名称,而不是 Ruby 可执行文件。
可选
Account
当使用 DB2 Connect 时,用于标识客户机帐户的一个字符串被发送至主机数据库服务器
可选
Workstation
当使用 DB2 Connect 时,用于标识客户机工作站名称的一个字符串被发送至主机数据库服务器
可选
Host
数据库所在远程服务器的主机名
可选(见注 5)
Port
该参数包含数据库服务器用于等待来自远程客户机的通信的 TCP/IP 端口的名称
可选(见注 5)
注 4:总是显式指定模式
强烈建议显式地指定模式,以便在逻辑上组织数据库对象。否则,如果使用相同的授权 ID 连接到由多个 Rails 项目共享的同一个数据库,就可能无意中致使多个 Rails 项目写入到同一个 <AuthID>.schema_info 表中。这将导致不可预测的结果。Schema_info 表用于跟踪迁移版本。下面的 Team Room 例子对此作了进一步的解释。