Ruby on Rails (RoR) 以「約定優於配置」、「DRY 原則」和 MVC 架構極大提升 Web 開發效率。IBM 推出 IBM_DB 驅動適配器,讓 Rails 原生支持 DB2 全系列 (含 pureXML)、Informix、IDS。配合 免費的 DB2 Express-C (無大小/時間/用戶限制) 及 Starter Toolkit for DB2 on Rails,構建零成本、企業級持久化的 RoR 應用成為現實。
database.yml 模板rails server 啟動 WEBrick,訪問示例頁確認連接正常。限制: v2.1 暫不支持連接 i5/OS (AS400) 和 z/OS 上的 DB2,後續版本將補齊。
適用於已有 DB2 服務器/客戶端、需自主控制版本的場景。
# 1. 確保已安裝 Ruby + DevKit (Windows) / GCC (Linux/Mac)
# 2. 從 RubyGems 或 RubyForge rubyibm 專案安裝最新穩定版 (0.6.0+)
gem install ibm_db
# 3. 若需本地編譯 C 擴展 (非預編譯平台),需設置 DB2 客戶端庫路徑
export IBM_DB_HOME=/opt/ibm/db2/V11.5 # Linux 示例
gem install ibm_db -- --with-ibm-db-dir=$IBM_DB_HOME
# 4. Rails 專案中配置 config/database.yml
development:
adapter: ibm_db
database: MYDB
username: db2inst1
password: xxx
host: localhost
port: 50000
# 可選: schema_search_path: MYSCHEMA
DB2 9+ 引入 pureXML,XML 以解析後的樹結構存儲,非文本大對象。IBM_DB 適配器充分利用此特性:
:xml 直接映射 XML 列。# 生成遷移
rails generate migration CreateProducts name:string price:decimal description:xml
# 遷移文件中使用 DB2 特有選項
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.string :name, limit: 100
t.decimal :price, precision: 10, scale: 2
t.xml :description # DB2 專屬類型
end
# DB2 特有:指定表空間、壓縮、組織方式
execute "ALTER TABLE products COMPRESS YES"
execute "ALTER TABLE products APPEND OFF"
end
end
# 執行遷移
rake db:migrate
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
LoadError: ibm_db.so | 驅動編譯失敗 / 庫路徑錯誤 | 檢查 IBM_DB_HOME、LD_LIBRARY_PATH;Windows 確認 db2cli.dll 在 PATH |
| 連接超時 | DB2 監聽端口/防火牆/主機名解析 | db2 list node directory 確認節點編目;telnet host 50000 測通 |
| 中文亂碼 | 代碼頁不匹配 | 確保數據庫 CODESET UTF-8;連接串加 ;CurrentSchema=...;ClientEncoding=UTF-8 |
遷移報錯 XML column not supported | 數據庫版本 < 9.1 或未啟用 pureXML | 升級 DB2 或改用 text 類型存儲 XML 文本 |
ibm_db GitHub/RubyForge 頁面:最新 Gem、Issue、文檔