Mysql 使用Rails,我可以在不使用ActiveRecord的情况下从遗留数据库检索数据吗?
我有一个新版本的网站,需要从旧版本的网站中提取一些信息。新旧数据库具有相同的表、字段等。旧网站正在运行Rails 3。新网站运行的是Rails 5 我想将一些记录(我们称之为订单)从旧数据库拉入新数据库 我的第一次尝试是创建一个模型类,并使用ActiveRecord建立连接,如下所示:Mysql 使用Rails,我可以在不使用ActiveRecord的情况下从遗留数据库检索数据吗?,mysql,ruby-on-rails,activerecord,ruby-on-rails-5,Mysql,Ruby On Rails,Activerecord,Ruby On Rails 5,我有一个新版本的网站,需要从旧版本的网站中提取一些信息。新旧数据库具有相同的表、字段等。旧网站正在运行Rails 3。新网站运行的是Rails 5 我想将一些记录(我们称之为订单)从旧数据库拉入新数据库 我的第一次尝试是创建一个模型类,并使用ActiveRecord建立连接,如下所示: class OldOrder < ActiveRecord::Base establish_connection( adapter: "mysql2", host: "old_
class OldOrder < ActiveRecord::Base
establish_connection(
adapter: "mysql2",
host: "old_server",
username: "user",
password: "password",
database: "database"
)
end
等等
不幸的是,每当我在OldOrder上运行任何命令时,都会收到以下错误消息:
*** RuntimeError Exception: Your version of MySQL (5.0.77) is too old. Active Record supports MySQL >= 5.1.10.
所以我想我有两个选择:在旧服务器上升级mysql(由于旧服务器的性质,这是不可取的),或者以其他方式获取数据
为了寻找可能的答案,我尝试使用原始sql:
sql = "Select * from ... your sql query here"
records_array = ActiveRecord::Base.connection.execute(sql)
但由于它使用ActiveRecord::Base来运行sql,因此也失败了
有没有办法不用ActiveRecord连接到Rails中的这个旧数据库,或者我应该寻找替代方案
谢谢你抽出时间 继Dave Slutzkin的评论之后,我安装了,并以大致相同的方式连接到旧数据库:
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
看到这个问题/答案:谢谢你的回答!我已经看到了这个答案,但不幸的是,它使用
“ActiveRecord::Base.establish_connection”
与第二个数据库建立了连接,我的问题是ActiveRecord本身无法与我的旧遗留数据库一起工作。我明白了。在这种情况下,你可能不得不:1。安装旧的mysql
gem-to-connect(如果您使用的是较新版本的Rails,则可能不是一个选项)2。从旧数据库创建一个转储文件,将其导入MySQL的新版本,然后连接到thatHm,好问题。添加ruby sequel gem怎么样?你可以用它来点击旧的数据库,用ActiveRecord来点击新的数据库。续集gem非常有用,谢谢!
old_orders = DB[:orders]
old_orders.where(whatever: "whatever").each do |old_order|
# Create new order
end