gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:20:40 25 4
gpt4 key购买 nike

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

这是在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com