【问题标题】:Using Rails, can I retrieve data from a legacy database without using ActiveRecord?使用 Rails,我可以在不使用 ActiveRecord 的情况下从旧数据库中检索数据吗?
【发布时间】:2019-01-11 14:44:59
【问题描述】:

我有一个新版本的网站,需要从旧版网站中提取一些信息。新旧数据库有相同的表、字段等。旧网站运行的是Rails 3。新网站运行的是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 中的这个旧数据库,还是我应该寻找替代方法?

感谢您的宝贵时间!

【问题讨论】:

  • 查看这个问题/答案:stackoverflow.com/questions/17311199/…
  • 感谢您的回复!我已经看到了这个答案,但不幸的是,它使用"ActiveRecord::Base.establish_connection" 建立了与第二个数据库的连接,而我的问题是 ActiveRecord 本身不适用于我的旧旧数据库。
  • 我明白了。在这种情况下,您可能必须: 1. 安装旧的mysql gem 进行连接(如果您使用的是较新版本的 Rails,则可能不是一个选项) 2. 从旧数据库创建转储文件,将其导入进入较新版本的 MySQL,并连接到该版本
  • 嗯,好问题。添加红宝石续集宝石怎么样? github.com/jeremyevans/sequel 您可以使用它来访问旧数据库并使用 ActiveRecord 访问新数据库。
  • 续集宝石很不错,谢谢!

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


【解决方案1】:

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

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

然后我可以按照与 ActiveRecord 相同的方式调用此 DB 对象上的语句,遵循 sequel 的文档。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多