ActiveRecord :: ConnectionTimeoutError偶尔发生

Kri*_*sta 20 activerecord database-connection ruby-on-rails connection-timeout ruby-on-rails-3.1

每当我有一个使用ActiveRecord的应用程序时,我得到这个ConnectionTimeoutError - 但总是在一段未知的时间之后

ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5 seconds.  The max pool size is currently 30; consider increasing it.):
Run Code Online (Sandbox Code Playgroud)

它之前设置为5,我们已经增加了它,并且它无法同时使用30个连接.我们使用ActiveRecord的唯一方法是我们的​​会话存储.

我们的database.yml文件如下所示:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 30
  timeout: 5000
Run Code Online (Sandbox Code Playgroud)

(测试和生产设置相同)


我一直在谷歌搜索这个事件,刚刚发现这个帖子:

https://groups.google.com/forum/#!msg/copenhagen-ruby-user-group/GEHgi_WudmM/gnCiwWqmVfMJ

哪个提到ActiveRecord一旦完成就不会检查连接回池?真的吗?我是否需要手动管理连接?

我很感激任何建议!!

编辑我应该提一下我正在运行Rails 3.1.3

Kyl*_*e C 12

Rails有一个中间件ActiveRecord::ConnectionAdapters::ConnectionManagement,它可以清除每个请求的活动连接,因此它们不会粘在一起.检查你的中间件以确保你有这个(默认情况下),运行"rake middleware".您不必手动管理连接以回答上一个问题.

在您的控制台中运行它

   ActiveRecord::Base.clear_active_connections!
Run Code Online (Sandbox Code Playgroud)

  • 如果您想立即清除连接,这只是答案 - 它不会阻止它再次发生。 (2认同)