mysql - Rails 4.2 连接到旧的遗留 Mysql 数据库 - 错误

标签 mysql ruby-on-rails ruby activerecord mysql2

经过几个小时的谷歌搜索,尝试了这个和那个,我想知道这里是否有人对如何克服这个错误有任何建议。

首先,我正在处理一个非常旧的 MySQL v3.23.58 数据库/服务器,此时我无法升级。正在从这个数据库迁移,但我现在需要通过 Rails UI 访问它。所以我在下面得到的错误似乎与发送的初始连接字符串不兼容,设置了一些 session 变量,是吗?我可以使用 *nix 命令行 mysql-client 连接到远程 DD/服务器并执行查询。我已经尝试通过连接定义更改初始值,但没有成功。我正在考虑将数据从远程服务器发送到本地 Rails 数据库并远程查询本地数据库的替代选项。但在这个时刻,我更愿意直接读/写远程数据库。如有任何帮助,我们将不胜感激!

谢谢

td@noc:~/rails_workspace/SC$ rails c
Loading development environment (Rails 4.2.1)
2.2.1 :001 > ServerBan
 => ServerBan (call 'ServerBan.connection' to establish a connection) 
2.2.1 :002 > b = ServerBan.first()
Mysql::Error: You have an error in your SQL syntax near 'NAMES latin1,  @@SESSION.sql_mode = '', @@SESSION.strict = 0, @@SESSION.sql_auto' at line 1

./config/database.yml

server1:
  adapter: mysql2
  encoding: utf8
  pool: 5
  host: <ip>
  port: 3306
  username: <user>
  password: <passwd>
  database: monitor
  strict: false
  variables: 
    sql_mode: ''

./app/models/serverban.rb

class ServerBan < ActiveRecord::Base
    establish_connection :server1
    self.table_name='rules'
end

最佳答案

修改./config/database.yml文件如下:

server1:
  adapter: mysql2
  encoding: utf8
  pool: 5
  host: <ip>
  port: 3306
  username: <user>
  password: <passwd>
  database: monitor
  strict: false
  variables: 
    sql_mode: ''

只有 sql_mode 应该在变量部分下。 strict 将成为主要参数的一部分。

参见 http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/MysqlAdapter.html有关每个参数的解释,包括 variables 参数。

关于mysql - Rails 4.2 连接到旧的遗留 Mysql 数据库 - 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491483/

相关文章:

php - php mysql 的表关联(加入?)

ruby-on-rails - Redis 上的连接数是否会限制我可以在后台执行的作业数?

ruby-on-rails - 为什么 rspec 没有在模型中应该是 NameError 的地方失败?

php - 如何从php中的sha1()获取加密字符的原始字符串?

mysql - 如何计算开始时间和结束时间之间的时间差?

php - 如果有数据则只显示 h3

ruby-on-rails - Rails 引擎应该附带 environment.rb 吗?

ruby-on-rails - API 参数中的连字符

mysql - gem 2.0。 ActiveRecord 4.1.2 的兼容性问题

ruby-on-rails - 使用 ruby​​ on rails 从图像列表创建视频