You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Ruby on Rails从远程Oracle数据库获取Customer表数据?

在Ruby on Rails中对接远程Oracle只读数据库获取Customer表数据

1. 添加Oracle数据库适配依赖

首先在项目Gemfile中引入Oracle相关的驱动与适配器:

# Gemfile
gem 'ruby-oci8'
gem 'activerecord-oracle_enhanced-adapter'

执行 bundle install 完成依赖安装。

2. 配置远程Oracle连接(只读模式)

在 config/database.yml 中新增远程Oracle的连接配置,开启只读限制避免意外写入:

remote_oracle:
  adapter: oracle_enhanced
  host: 远程Oracle服务器IP/域名
  port: 1521 # 若使用自定义端口,替换为实际值
  database: ORCL # 替换为目标Oracle实例的SID或服务名
  username: 只读权限账号
  password: 账号密码
  readonly: true
  pool: 5

3. 创建只读Customer模型

创建对应Customer表的模型,绑定远程Oracle连接,并彻底禁用所有写操作:

# app/models/customer.rb
class Customer < ApplicationRecord
  self.table_name = 'CUSTOMER' # Oracle表名通常为大写,需与实际表名一致
  self.establish_connection :remote_oracle

  # 标记模型为只读
  def readonly?
    true
  end

  # 重写写操作方法,直接抛出错误强化限制
  def save(*)
    raise ActiveRecord::ReadOnlyRecord, "该模型为只读,不允许写入操作"
  end

  def save!(*)
    raise ActiveRecord::ReadOnlyRecord, "该模型为只读,不允许写入操作"
  end

  def destroy(*)
    raise ActiveRecord::ReadOnlyRecord, "该模型为只读,不允许删除操作"
  end

  # 禁用类级别的写操作
  def self.create(*)
    raise ActiveRecord::ReadOnlyRecord, "该模型为只读,不允许创建操作"
  end

  def self.update(*)
    raise ActiveRecord::ReadOnlyRecord, "该模型为只读,不允许更新操作"
  end

  def self.destroy(*)
    raise ActiveRecord::ReadOnlyRecord, "该模型为只读,不允许删除操作"
  end
end

4. 数据查询示例

完成配置后,即可像普通Rails模型一样查询数据:

# 获取全部客户数据
all_customers = Customer.all

# 按条件筛选
active_customers = Customer.where(status: 'ACTIVE')

# 查询单个客户
target_customer = Customer.find_by(id: 123)

注意事项

  • 确保远程Oracle服务器的对应端口对外开放,且客户侧防火墙允许你的服务器访问
  • 确认所用账号仅拥有Customer表的SELECT权限,从权限层面强化只读限制
  • Oracle表名/字段名区分大小写,若目标表为小写,需在database.yml中添加lowercase_table_names: true配置
  • 安装ruby-oci8时可能需要依赖Oracle Instant Client,需根据操作系统安装对应版本的客户端环境

内容的提问来源于stack exchange,提问作者özgür pir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:11:16