【发布时间】: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. 安装旧的
mysqlgem 进行连接(如果您使用的是较新版本的 Rails,则可能不是一个选项) 2. 从旧数据库创建转储文件,将其导入进入较新版本的 MySQL,并连接到该版本 -
嗯,好问题。添加红宝石续集宝石怎么样? github.com/jeremyevans/sequel 您可以使用它来访问旧数据库并使用 ActiveRecord 访问新数据库。
-
续集宝石很不错,谢谢!
标签: mysql ruby-on-rails activerecord ruby-on-rails-5