Я пытаюсь сделать простой API в Sinatra как практика. У меня есть код, как показано ниже:Postgresql соединения в Sinatra
require 'pg'
...
db_params = {
host: 'localhost',
dbname: 'dbname',
user: 'user',
password: 'password'
}
psql = PG::Connection.new(db_params)
before { content_type 'application/json' }
after { psql.close }
get '/' do
beer = psql.exec_params('SELECT * FROM beers LIMIT 20')
...
end
Я замечаю, что, когда я нажимаю URL-адрес, я получаю свои результаты. Если я удалю его снова относительно быстро, он вернет, что соединение было закрыто. Это имеет смысл, так как я закрываю соединение после отправки ответа. Однако мое предположение заключалось в том, что он будет открывать другое соединение для следующего запроса. Возможно, я не понимаю, как работает PG gem. Я хочу убедиться, что правильно его использую. Нужно ли мне беспокоиться о том, чтобы закрыть его каждый раз? Если я не закрою его вручную, он оставит соединение открытым и вытолкнет ресурсы, или он автоматически закроет соединение в конце ответа?
Как вы рекомендуете это делать в производственной среде? – searsaw
Используйте пул соединений: http://en.wikipedia.org/wiki/Connection_pool –