ruby-on-rails - 在 Puma 中,如何计算数据库连接?

标签 ruby-on-rails heroku ruby-on-rails-5 puma

我想弄清楚我的应用程序将使用多少个数据库连接。

这是在 Heroku 上托管的 Rails 5。

这是我的 Puma 配置

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  ActiveRecord::Base.establish_connection
end

我的数据库配置的第一部分:
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV['RAILS_MAX_THREADS'] || 5 %>

我觉得奇怪的部分是连接数,还有我的 pool设置在 database.yml都在使用 RAILS_MAX_THREADS ...但不应该使用 RAILS_MAX_THREADS乘以 worker 数量 ( WEB_CONCURRENCY ?

最佳答案

其实我在这里找到了很好的答案... https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#database-connections

当您向应用程序添加更多并发性时,它将需要更多连接到您的数据库。确定每个应用程序所需连接数的一个很好的公式是乘以 RAILS_MAX_THREADSWEB_CONCURRENCY .这种组合将决定每个 dyno 将消耗的连接数。
Rails 维护其数据库连接池,并为每个工作进程创建一个新池。工作线程中的线程将在同一个池中运行。确保 Rails 数据库连接池中有足够的连接,以便 RAILS_MAX_THREADS可以使用的连接数。如果您看到此错误:

ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5 seconds
此错误表明您的 Rails 连接池太低。要深入了解这些主题,请阅读开发中心文章 Concurrency and Database Connections .

关于ruby-on-rails - 在 Puma 中,如何计算数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412611/

相关文章:

elasticsearch - Ruby:ElasticSearch:升级Chewy/ElasticSearch版本时出错

ruby-on-rails - 如何轮换我的 Rails 5 日志?

ruby-on-rails - 使用 Rack 和 Event Machine 将 WebSockets 与 Rails 集成

ruby-on-rails - 如何重新加载安装到 Rails 应用程序中的 sinatra 模块化应用程序?

ruby-on-rails - Heroku ruby​​ on rails 资源部署问题

svn commit后Git推送自动部署到Heroku?

css - 以简单形式和载波自定义图像上传字段

ruby-on-rails - 在测试模式下没有来自 ActiveRecord 且带有 byebug 的 SQL 日志

ruby-on-rails - 如何计算模型中的条件和?

ruby-on-rails - Heroku 上的应用程序错误 : An error occurred in the application and your page could not be served