Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用Rails,我可以在不使用ActiveRecord的情况下从遗留数据库检索数据吗?_Mysql_Ruby On Rails_Activerecord_Ruby On Rails 5 - Fatal编程技术网

Mysql 使用Rails,我可以在不使用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_

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

我想将一些记录(我们称之为订单)从旧数据库拉入新数据库

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

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