0

我有一个 ruby​​ 脚本,它需要'mysql2'并使用查询语句来 mysql,
@db.query("SELECT sname,id FROM streets where region_id=#{region["id"]}")
但它总是向我报告一个错误,如下所示:

main.rb:261:in `query': MySQL server has gone away (Mysql2::Error)
    from main.rb:261:in `block (3 levels) in <main>'
    from main.rb:258:in `each'
    from main.rb:258:in `block (2 levels) in <main>'
    from main.rb:254:in `each'
    from main.rb:254:in `block in <main>'
    from main.rb:253:in `loop'
    from main.rb:253:in `<main>'

我的 Ubuntu 上的脚本没问题,但是,我的生产环境是 CentOS,在那里我从源代码安装了 MySQL。我的 Rails 应用程序运行正常,它还需要“mysql2”,但是当我运行这个脚本时它失败了。

我认为问题与 my.cnf 有关,但我不知道如何配置它。

4

2 回答 2

2

mysql2 gem 提供了在连接消失时重新连接到 MySQL的选项不要更新 my.cnf 文件,而是更新 gem 的 database.yml 文件以包含

  reconnect: true

选项。这将确保 mysql2 gem 将在需要时尝试重新连接到 MySQL。

于 2012-12-19T09:32:38.577 回答
1

您直接在对象@db 上调用 .query 方法...这个对象到底是什么?

我的意思是......如果你在 Rails 下,你应该调用如下查询:

result = ActiveRecord::Base.connection.execute("sql here")

我认为这可能是原因,因为 Rails 管理连接池(例如 5 个已建立的连接,每个查询都根据请求转到其中一个)。

无论如何,如果这不是原因,那么可能是您的 mysql2 gem 是使用系统上不同版本的 libmysqlclient.so 库编译的...然后当您尝试进行查询时,它在内部抛出有关不兼容协议的错误并断开...

请检查您的 libmysqlclient.so 及其头文件的版本是否相同...或者如果您没有安装更多版本...然后请尝试重新编译 mysql2 gem。

希望这可以帮助。问候, NoICE

于 2011-05-21T06:57:36.080 回答