22

ActiveRecordを使用しているアプリケーションがあるときはいつでも、このConnectionTimeoutErrorが発生しますが、常に特定の不明な期間が経過すると

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

以前は5に設定されていましたが、すでに増やしており、同時に30の接続を使用する方法はありません。ActiveRecordを使用するのはセッションストアだけです。

database.ymlファイルは次のようになります。

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 30
  timeout: 5000

(テストと本番の設定は同じです)


私はこの出来事をグーグルで調べていて、ちょうどこの投稿に出くわしました:

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

ActiveRecordは、接続が完了するとプールに接続をチェックバックしないと言っているのはどれですか?本当?接続を手動で管理する必要がありますか?

アドバイスありがとうございます!!

編集私はおそらくRails3.1.3を実行していることに言及する必要があります

4

4 に答える 4

13

ActiveRecord::ConnectionAdapters::ConnectionManagementRailsには、リクエストごとにアクティブな接続をクリアするというミドルウェアがあり、接続が固執することはありません。ミドルウェアをチェックして、これがあることを確認し (デフォルトでそこにあります)、「rake middleware」を実行します。最後の質問に答えるために手動で接続を管理する必要はありません。

これをコンソールで実行します

   ActiveRecord::Base.clear_active_connections!
于 2012-08-22T22:31:31.837 に答える
2

Sinatra アプリでこのコードを使用しました

after do
  ActiveRecord::Base.clear_active_connections!
end   

これは私の問題を解決します

于 2014-05-13T14:32:55.240 に答える