【发布时间】:2018-08-18 16:11:54
【问题描述】:
我有一个使用 Postgres 在 Heroku 免费计划上运行的 Sinatra 应用程序,我尝试将数据库连接设置为 20,但在我推送并运行 heroku pg:info 后,连接仍然是 5/20。即使我尝试对其进行 loader.io 负载测试,它也不会使用所有 20 个连接。
所以我想知道我该怎么做才能让它利用所有 20 个可用连接,或者我在这里有一些误解?
# database.yml (for ActiveRecord)
production:
adapter: postgresql
encoding: unicode
database: mydb
username: <%= ENV['PG_USER'] %>
password: <%= ENV['PG_PASS'] %>
pool: <%= ENV['DB_POOL'] || ENV['RAILS_MAX_THREADS'] || 20 %>
# Procfile
web: bundle exec puma -t 5:20 -p $PORT
# puma.rb
preload_app!
on_worker_boot do
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.establish_connection
end
end
# config.ru
require_relative './config/init'
use Rack::SSL if ENV['RACK_ENV'] == 'production'
run Sinatra::Application
DB_POOL 变量在 Heroku 上已设置为 20,但它仍然没有做任何事情。任何帮助将不胜感激。
【问题讨论】:
-
Heroku/数据库提供者的文档中哪里说你得到了 20?
-
@iain running
heroku pg:info总是显示我只使用了总连接数的 5/20。 devcenter.heroku.com/articles/heroku-postgres-plans#hobby-tier 还说我的爱好开发计划应该允许最多 20 个连接。 -
您是如何测试数据库连接的?我的意思是,让 Puma 启动一个新线程只是意味着一个新的连接,但我怀疑你需要长时间运行对 Postgres 的每次调用,否则你不会用完池,我猜想不需要连接它会落回池中并尽可能保持在最低限度(这就是池通常的编写方式)。尝试编写一个非常慢的查询,看看是否会有所不同。
-
@iain 我更新了代码以包含我的 config.ru 和 puma.rb 文件,因为我猜它们与启动 puma 有关。你能发现这些有什么问题吗?我现在真的不知道。
标签: ruby postgresql heroku sinatra puma