mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-30 02:32:29 +00:00
Rails 7.1 ships with connection-pooling enabled by default for `RedisCacheStore` (see rails/rails#45235). Because we already wrap our Redis clients in our own `ConnectionPool` ($alfred / $velma), the upgrade resulted in a double-wrapped object and runtime errors such as: NoMethodError: undefined method `get` for an instance of ConnectionPool This patch: * Passes `pool: false` when instantiating `RedisCacheStore` in `config/initializers/rack_attack.rb`, telling Rails to use the pool we supply instead of building its own. * Adds an inline comment explaining the rationale. * Adds a TODO in `config/initializers/01_redis.rb` suggesting a future simplification: switch to plain Redis clients and let Rails manage the pool. Reference docs: * rails/rails#45235 – “Enable connection pooling by default for MemCacheStore and RedisCacheStore” - https://github.com/rails/rails/pull/45235 * Rails 7.1 Caching Guide – 2.1.1 “Connection Pool Options” (use `pool: false`) [Ruby on Rails Guides](https://guides.rubyonrails.org/v7.1/caching_with_rails.html)
19 lines
761 B
Ruby
19 lines
761 B
Ruby
# TODO: Phase out the custom ConnectionPool wrappers ($alfred / $velma),
|
|
# switch to plain Redis clients here and let Rails 7.1+ handle pooling
|
|
# via `pool:` in RedisCacheStore (see rack_attack initializer).
|
|
|
|
# Alfred
|
|
# Add here as you use it for more features
|
|
# Used for Round Robin, Conversation Emails & Online Presence
|
|
$alfred = ConnectionPool.new(size: 5, timeout: 1) do
|
|
redis = Rails.env.test? ? MockRedis.new : Redis.new(Redis::Config.app)
|
|
Redis::Namespace.new('alfred', redis: redis, warning: true)
|
|
end
|
|
|
|
# Velma : Determined protector
|
|
# used in rack attack
|
|
$velma = ConnectionPool.new(size: 5, timeout: 1) do
|
|
config = Rails.env.test? ? MockRedis.new : Redis.new(Redis::Config.app)
|
|
Redis::Namespace.new('velma', redis: config, warning: true)
|
|
end
|