首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql2::Error:关闭MySQL连接

Mysql2::Error:关闭MySQL连接
EN

Stack Overflow用户
提问于 2012-03-09 23:51:33
回答 2查看 2.5K关注 0票数 0

运行:

代码语言:javascript
复制
Timeout.timeout(1) { User.find_by_sql('SELECT sleep(2) FROM users;') }

返回以下内容:

代码语言:javascript
复制
  User Load (1004.2ms)  SELECT sleep(2) FROM users;
ActiveRecord::StatementInvalid: : execution expired: SELECT sleep(2) FROM users;
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:687:in `query'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:687:in `block in exec_query'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:685:in `exec_query'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:679:in `select'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/database_statements.rb:18:in `select_all'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/base.rb:470:in `find_by_sql'
    from (irb):1:in `block in irb_binding'
    from /Users/Chris/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/timeout.rb:58:in `timeout'
    from (irb):1
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start'
    from /Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `

对于PgSql,似乎不会发生以下情况。Mysql2或ActiveRecord中有没有bug?

我读到过,当mysql无法处理太多的连接时,就会发生这种情况。但是为什么这不会发生在PgSql上呢?

PS。我正在使用Amazon RDS,如果这有什么不同的话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-10 00:08:06

当然,您在Timeout.timeout(1)块中执行此操作,我认为您应该设置更长的超时。

票数 0
EN

Stack Overflow用户

发布于 2013-01-17 19:21:30

它在MySql中给出错误而不是PgSql错误的原因是,睡眠是一个有效的Mysql函数,但不是一个有效的Pgsql函数。后者中的正确函数是pg_sleep。也就是说,查询休眠2秒,而在Ruby代码中,您将执行限制为1秒,因此会引发超时异常。对于Pg的情况,它应该给出另一种类型的异常,比如“睡眠不是一个有效的pgsql函数”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9636963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档