Ist sonst noch jemandem aufgefallen, dass REDIS_URL keine Auswirkung mehr hat? Sowohl beim (Neu-)Build als auch beim Start des Containers versucht er, über redis://localhost:6379 eine Verbindung herzustellen, obwohl REDIS_URL so eingestellt ist, dass er über einen UNIX-Socket verbunden wird.
Einerseits ist das sinnvoll, da Discourse Konfigurationen für Host und Port hat und nur diese anwendet: discourse/app/models/global_setting.rb at main · discourse/discourse · GitHub
Dort gäbe es einen path-Parameter zur Definition eines UNIX-Socket-Pfades, der Host und Port überschreiben würde. Und es gäbe einen url-Parameter zur Definition einer vollständigen URL wie unix:///shared/redis_data/redis.sock.
Das Redis-Gem dokumentiert, dass die Umgebungsvariable REDIS_URL alle anderen Einstellungen überschreiben würde, und bis zu einer bestimmten Discourse/Redis-Gem-Version funktionierte dies: redis-rb/lib/redis.rb at master · redis/redis-rb · GitHub
Die Verwendung von UNIX-Sockets brach, als Discourse zur Redis-Gem-Version 5 wechselte: DEV: Upgrade the Redis gem to v5.4 · discourse/discourse@2ed31fe · GitHub
Ich vermute also, dass REDIS_URL im Redis-Gem (das andere Optionen nicht mehr überschreibt) und nicht bei Discourse (wo der zugehörige Code nicht geändert wurde) kaputtgegangen ist?
Wahrscheinlich hat dieser Commit es kaputt gemacht: Use redis-client as transport · redis/redis-rb@08a2100 · GitHub
Ich würde es im Redis-Gem-Repository melden, oder weiß jemand, dass es ein Problem mit der Implementierung von Discourse ist?
Die Umgebungsvariable wird übrigens korrekt übergeben. Ich habe sie beibehalten und nur Redis so konfiguriert, dass es nicht auf dem UNIX-Socket lauscht, und während Unicorn schön startet, schlägt Sidekiq fehl und vermisst den UNIX-Socket:
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'
Es passt ins Bild, dass REDIS_URL immer noch funktioniert, aber nur, wenn keine anderen Verbindungseinstellungen definiert sind. Wenn man sich die Fehlerspur ansieht, wendet global_setting.rb Host und Port nicht für Sidekiq an, wie es das für Unicorn tut.