ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)

后端 未结 3 1287
日久生厌
日久生厌 2020-12-30 23:48

I have a rails app in production that i deployed some changes to the other day. All of a sudden now I get the error ActiveRecord::ConnectionTimeoutError: could not obt

相关标签:
3条回答
  • 2020-12-31 00:14

    I had the same problems which were caused by too many open connections to the database. This can happen when you have database queries outside of a controller (in a model, mailer, pdf generator, ...).

    I could fix it by wrapping those queries in this block which closes the connection automatically.

    ActiveRecord::Base.connection_pool.with_connection do
      # your code
    end
    

    Since Puma works multi-threaded, the pool size (as eabraham mentioned) can be a limitation, too. Try to increase it (a little)...

    I hope this helps!

    0 讨论(0)
  • 2020-12-31 00:22

    Ultimately this issue still plagued me for another year or so. I finally got a good solution from working with the puma guys.

    Upgrade your puma to at least 2.15.x.

    0 讨论(0)
  • 2020-12-31 00:30

    With the help of the devise guys' I think I finally got this issue figured out. It seemed that by using custom error pages with it's own controller, I wasn't skipping the before_action get_new_messages. So the very simple fix was to add:

    skip_before_filter :get_new_messages
    

    to my custom error controller.

    This issue explains in detail the reason behind this: https://github.com/plataformatec/devise/issues/3422

    0 讨论(0)
提交回复
热议问题