Ruby on Rails 迁移可以解决前面描述的涉及数据库和数据结构更改的一些问题。现在,让我们看看 Rails 迁移如何为数据库模式变更提供帮助。
我们来考察一个 Rails 迁移的例子,该例子使用 IBM_DB 适配器,并尝试一些与 Rails 应用程序变更相关的数据库对象更改。 但是,首先需要确保像前面描述的那样安装和配置了 DB2 on Rails 开发环境。
我们的例子将尝试构建一个 Team Room,这是一个托管应用程序,它使注册的成员可以共享文本或二进制格式的各种文档,包括图像、可执行文件和任何其他媒体。另外还包括被共享的 XML 文档,因为通过 pureXML 数据类型很容易将它们本地存储在 DB2 9 中。这个例子还将发现利用 XML 文档内置层次结构的一些好方法。
-
首先,创建一个名为 “teamroom” 的 Rails 项目:
清单 1. 创建 Team Room Rails 项目D:\rails>rails teamroom create create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create components create db <etc ......> create log/server.log create log/production.log create log/development.log create log/test.logRails 框架自动生成该项目的目录结构。从这里开始,我们假设是在 D:\rails\teamroom 目录中,此后提到的所有路径都是 Team Room 项目目录下的相对路径。
-
如果已经有一个 DB2 数据库,那么可以忽略这一步,直接进入步骤 3,开始配置数据库连接。
预计可能需要在本地将 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
-
现在编辑D:\rails\teamroom\config\database.yml文件,以建立到 DB2 9 XMLDB 数据库的连接。
清单 3. 编辑 database.yml 文件
# IBM DB2 Database configuration file # # Install the IBM DB2 driver and get assistance from: # http://www.alphaworks.ibm.com/tech/db2onrails development: adapter: ibm_db database: xmldb username: user password: secret schema: teamroom application: TeamRoom account: devuser workstation: devbox # == remote TCP/IP connection (required when no local database catalog entry available) # host: bigserver // fully qualified hostname or IP address # port: 50000 // data server TCP/IP port number
下面的表中解释了 DB2 的每个连接属性:
表 1. 可用于 database.yml 的 DB2 连接属性
连接属性 | 描述 | 是否必需 |
---|---|---|
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) |