使用Rails,可以在不使用ActiveRecord的情况下从旧数据库中检索数据吗?

时间:2019-01-11 14:44:59

标签: mysql ruby-on-rails activerecord ruby-on-rails-5

我有一个新版本的网站,需要从旧版网站中提取一些信息。新旧数据库具有相同的表,字段等。旧网站正在运行Rails3。新网站正在运行Rails 5。

我想从旧数据库中提取一些记录(我们称之为订单)到新数据库中。

我的第一个尝试是创建模型类并使用ActiveRecord建立连接,如下所示:

class OldOrder < ActiveRecord::Base
  establish_connection(
    adapter:  "mysql2",
    host:     "old_server",
    username: "user",
    password: "password",
    database: "database"
  )
end

然后像这样调用记录:

OldOrder.where(order_number: "whatever").each do |order|
  # and so on
end

以此类推。

不幸的是,每当我在OldOrder上运行任何命令时,都会收到以下错误消息:

*** RuntimeError Exception: Your version of MySQL (5.0.77) is too old. Active Record supports MySQL >= 5.1.10.

所以我认为我有两个选择:在旧服务器上升级mysql(由于旧服务器的特性,这是不希望的),或者以其他方式获取数据。

搜索StackOverflow寻找潜在答案,我尝试使用原始sql:

 sql = "Select * from ... your sql query here"
 records_array = ActiveRecord::Base.connection.execute(sql)

但是由于它使用ActiveRecord :: Base来运行sql,所以它也失败了。

在不使用ActiveRecord的情况下,是否有任何方法可以连接到Rails中的这个旧数据库?还是我应该寻找替代方法?

谢谢您的时间!

1 个答案:

答案 0 :(得分:1)

在Dave Slutzkin发表评论之后,我安装了sequel gem并以几乎相同的方式连接到旧数据库:

DB = Sequel.connect(
  adapter: :mysql2,
  host: 'old_server',
  user: 'user',
  password: 'password',
  database: 'database'
)

然后,按照续集的文档,我可以用与ActiveRecord几乎相同的方式来调用此DB对象上的语句。

old_orders = DB[:orders]
old_orders.where(whatever: "whatever").each do |old_order|
   # Create new order
end