我已阅读以下帖子:
在 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:inwith_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 %>