Quelqu’un d’autre a-t-il remarqué que REDIS_URL n’a plus d’effet ? Lors de la (re)construction et même au démarrage du conteneur, malgré le réglage de REDIS_URL pour se connecter via un socket UNIX, il essaie de se connecter via redis://localhost:6379.
D’une part, cela a du sens, car Discourse a des configurations pour l’hôte et le port uniquement et les applique : discourse/app/models/global_setting.rb at main · discourse/discourse · GitHub
Il y aurait un paramètre path pour définir un chemin de socket UNIX, qui remplacerait l’hôte et le port. Et il y aurait un paramètre url, pour définir une URL complète comme unix:///shared/redis_data/redis.sock.
La gem Redis documente que la variable d’environnement REDIS_URL remplacerait tous les autres paramètres, et jusqu’à une certaine version de la gem Discourse/Redis, cela fonctionnait : redis-rb/lib/redis.rb at master · redis/redis-rb · GitHub
L’utilisation du socket UNIX a échoué lorsque Discourse est passé à la version 5 des gems Redis : DEV: Upgrade the Redis gem to v5.4 · discourse/discourse@2ed31fe · GitHub
Je suppose donc que REDIS_URL a échoué dans la gem Redis (ne remplaçant plus les autres options), et non par Discourse (où le code associé n’a pas changé) ?
Ce commit a probablement causé le problème : Use redis-client as transport · redis/redis-rb@08a2100 · GitHub
Je le signalerais dans le dépôt de la gem Redis, ou quelqu’un sait-il que c’est un problème avec la façon dont Discourse l’implémente ?
La variable d’environnement est d’ailleurs correctement transmise. Je l’ai laissée en place et j’ai seulement configuré Redis pour qu’il n’écoute pas sur le socket UNIX, et bien que unicorn démarre correctement, sidekiq échoue, manquant le socket UNIX à la place
:
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'
Cela correspond à l’idée que REDIS_URL fonctionne toujours, mais uniquement si les paramètres de connexion ne sont pas définis autrement. En regardant la trace d’erreur, global_setting.rb n’applique pas l’hôte et le port pour sidekiq, comme il le fait pour unicorn.