Qualcun altro ha notato che REDIS_URL non ha più alcun effetto? Durante la (ri)compilazione e anche all’avvio del container, nonostante REDIS_URL sia impostato per connettersi tramite socket UNIX, tenta di connettersi tramite redis://localhost:6379.
Da un lato, ha senso, poiché Discourse ha configurazioni per host e porta e le applica solo: discourse/app/models/global_setting.rb at main · discourse/discourse · GitHub
Ci sarebbe un parametro path per definire un percorso del socket UNIX, che sovrascriverebbe host e porta. E ci sarebbe un parametro url, per definire un URL completo come unix:///shared/redis_data/redis.sock.
La gemma Redis documenta che la variabile d’ambiente REDIS_URL sovrascriverebbe qualsiasi altra impostazione, e fino a una certa versione della gemma Discourse/Redis questo ha funzionato: redis-rb/lib/redis.rb at master · redis/redis-rb · GitHub
L’uso del socket UNIX si è interrotto quando Discourse è passato alla versione 5 delle gemme Redis: DEV: Upgrade the Redis gem to v5.4 · discourse/discourse@2ed31fe · GitHub
Quindi suppongo che REDIS_URL si sia interrotto nella gemma Redis (non sovrascrivendo più altre opzioni), e non da Discourse (dove il codice correlato non è cambiato)?
Probabilmente questo commit l’ha rotto: Use redis-client as transport · redis/redis-rb@08a2100 · GitHub
Lo segnalerei nel repository della gemma Redis, o qualcuno sa che è un problema con il modo in cui Discourse lo implementa?
La variabile d’ambiente, tra l’altro, viene passata correttamente. L’ho lasciata attiva e ho solo configurato Redis per non ascoltare sul socket UNIX, e mentre unicorn si avvia correttamente, sidekiq fallisce, mancando il socket UNIX invece
:
Error in demon processes heartbeat check: No such file or directory - connect(2) for /shared/redis_data/redis.sock
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client/ruby_connection.rb:116:in `initialize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client/ruby_connection.rb:116:in `new'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client/ruby_connection.rb:116:in `connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client/ruby_connection.rb:51:in `initialize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client.rb:759:in `new'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client.rb:759:in `block in connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client/middlewares.rb:12:in `connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client.rb:758:in `connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client.rb:745:in `raw_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client.rb:705:in `ensure_connected'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.24.0/lib/redis_client.rb:285:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/redis_client_adapter.rb:36:in `block (2 levels) in <module:CompatMethods>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/api.rb:912:in `block in cleanup'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/config.rb:175:in `block in redis'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/connection_pool-2.5.3/lib/connection_pool.rb:110:in `block (2 levels) in with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/connection_pool-2.5.3/lib/connection_pool.rb:109:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/connection_pool-2.5.3/lib/connection_pool.rb:109:in `block in with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/connection_pool-2.5.3/lib/connection_pool.rb:106:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/connection_pool-2.5.3/lib/connection_pool.rb:106:in `with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/config.rb:172:in `redis'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq.rb:74:in `redis'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/api.rb:912:in `cleanup'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/api.rb:903:in `initialize'
/var/www/discourse/lib/demon/sidekiq.rb:25:in `new'
/var/www/discourse/lib/demon/sidekiq.rb:25:in `heartbeat_check'
config/unicorn.conf.rb:131:in `block (2 levels) in reload'
Si adatta al quadro il fatto che REDIS_URL funzioni ancora, ma solo se le impostazioni di connessione non sono definite diversamente. Guardando la traccia dell’errore, global_setting.rb non applica host e porta per sidekiq, come fa per unicorn.