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
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!
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
.
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