Refresh ActiveRecord connection on each rack request
Add the following to your Gemfile
:
gem 'activerecord-refresh_connection'
And then execute:
$ bundle
This gem provides a rack middleware ActiveRecord::ConnectionAdapters::RefreshConnectionManagement
which disconnects all connections in each rack request, which results in refreshing all connections in each rack request.
NOTE: activerecord-refresh_connection does not work with puma, and webrick server in rails 5.
# config/application.rb
class Application < Rails::Application
config.middleware.insert_before ActionDispatch::Executor,
ActiveRecord::ConnectionAdapters::RefreshConnectionManagement
## If you would like to clear connections after 5 requests:
# config.middleware.insert_before ActionDispatch::Executor,
# ActiveRecord::ConnectionAdapters::RefreshConnectionManagement, max_requests: 5
end
Middleware check.
bundle exec rake middleware
Use unicorn server to run your application.
NOTE: activerecord-refresh_connection does not work with puma server in rails 4.
Swap the default rails ConnectionManagement.
# config/application.rb
class Application < Rails::Application
config.middleware.swap ActiveRecord::ConnectionAdapters::ConnectionManagement,
"ActiveRecord::ConnectionAdapters::RefreshConnectionManagement"
## If you would like to clear connections after 5 requests:
# config.middleware.insert_before ActiveRecord::ConnectionAdapters::ConnectionManagement,
# "ActiveRecord::ConnectionAdapters::RefreshConnectionManagement", max_requests: 5
# config.middleware.delete ActiveRecord::ConnectionAdapters::ConnectionManagement
end
Middleware check.
bundle exec rake middleware
# config.ru
require 'activerecord-refresh_connection'
use ActiveRecord::ConnectionAdapters::RefreshConnectionManagement
## If you would like to clear connections after 5 requests:
# use ActiveRecord::ConnectionAdapters::RefreshConnectionManagement, max_requests: 5
run App
See CHANGELOG.md for details.
Run example
cd example/xxxx
bundle
bundle exec foreman start
Watch show processlist
in mysql console to see connections are killed on each access.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Copyright (c) 2014 Naotoshi Seo. See LICENSE.txt for details.