0

我已阅读以下帖子:

在 Heroku 上设置 Sidekiq :concurrency 如何使用 Rails 4、Puma 和 Sidekiq 配置 Redis 连接?

但是,我仍然无法解决以下问题......

我在暂存和生产部署中遇到错误消息,我认为我需要更改下面的设置,但不确定最佳设置。

我使用工作人员 Sidekick/redis 发送有关注册/密码重置/联系我们表格的邮件,并将日志发送到 Sentry(错误记录)。

例外

Redis::CommandError: ERR max number of clients reached redis (4.2.2) lib/redis/client.rb:127:in call' redis (4.2.2) lib/redis/client.rb:108:in block in connect' redis (4.2.2) lib/redis/client.rb:308:in with_reconnect' redis (4.2.2) lib/redis/client.rb:106:in connect ' redis (4.2.2) lib/redis/client.rb:381:in `ensure_connected' ...(未显示 29 个额外的帧)

信息

ERR 达到最大客户端数

我正在使用 Heroku,我的 Redis 允许 30 个连接,我的数据库的连接限制为 20。我有一个 web dyno 和一个 worker dyno。

我的生产和登台部署有单独的数据库/redis 数据库。

搭档.yml

production:
  :concurrency: 17
staging:
  :concurrency: 10

puma.rb

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

preload_app!
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }

before_fork do
  puts "Puma master process about to fork. Closing existing Active record connections."
  ActiveRecord::Base.connection.disconnect!
end

on_worker_boot do
  ActiveRecord::Base.establish_connection
end

plugin :tmp_restart

哨兵任务.rb

class SentryJob < ApplicationJob
  queue_as :default

  def perform(event)
    Raven.send_event(event)
  end
end

数据库.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV["DB_POOL"] || ENV['RAILS_MAX_THREADS'] || 5 %>
4

0 回答 0