Ответ 1
Вы правы, промежуточное ПО ConnectionManagement
было удалено из ActiveRecord 5 (PR # 23807), поэтому вам нужно будет при настройке ActiveRecord за пределами Rails. Существует несколько способов сделать это:
1. ConnectionManagement
Средство промежуточного уровня стойки
ConnectionManagement
класс не очень сложный. Вы можете скопировать и вставить реализацию где-нибудь в локальном приложении и включить ее как обычно в стек промежуточного программного обеспечения стойки:
class ConnectionManagement
def initialize(app)
@app = app
end
def call(env)
testing = env['rack.test']
status, headers, body = @app.call(env)
proxy = ::Rack::BodyProxy.new(body) do
ActiveRecord::Base.clear_active_connections! unless testing
end
[status, headers, proxy]
rescue Exception
ActiveRecord::Base.clear_active_connections! unless testing
raise
end
end
use ConnectionManagement
2. (Sinatra-specific) подключение-управление after
hook
В приложении Sinatra блок, который вы предложили, должен работать:
after do
ActiveRecord::Base.clear_active_connections!
end
Обратите внимание, что это также подход используемый в настоящее время sinatra-activerecord
для поддержки ActiveRecord 5 (см. вопрос # 73).
3. ActionDispatch::Executor
Средство промежуточного уровня стойки
Наконец, вы можете использовать тот же код. Rails теперь использует для управления соединениями ActiveRecord, добавляя ActionDispatch::Executor
в свой стековый промежуточный пакет и вызывая ActiveRecord::QueryCache#install_executor_hooks
, чтобы вставить крючок, используемый для очистки соединений ActiveRecord:
require 'action_dispatch/middleware/executor'
use ActionDispatch::Executor, ActiveSupport::Executor
ActiveRecord::QueryCache.install_executor_hooks