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