Alguém mais percebeu que REDIS_URL não tem mais efeito? Durante a (re)construção e também na inicialização do contêiner, apesar de REDIS_URL estar configurado para conectar via socket UNIX, ele tenta conectar via redis://localhost:6379.
Por um lado, faz sentido, já que o Discourse tem configurações para e aplica apenas host e porta: discourse/app/models/global_setting.rb at main · discourse/discourse · GitHub
Haveria um parâmetro path para definir um caminho de socket UNIX, que substituiria host e porta. E haveria um parâmetro url, para definir uma URL completa como unix:///shared/redis_data/redis.sock.
O gem Redis documenta que a variável de ambiente REDIS_URL substituiria quaisquer outras configurações, e até uma certa versão do Discourse/Redis gem isso funcionou: redis-rb/lib/redis.rb at master · redis/redis-rb · GitHub
O uso do socket UNIX quebrou quando o Discourse mudou para a versão 5 do gem Redis: DEV: Upgrade the Redis gem to v5.4 · discourse/discourse@2ed31fe · GitHub
Então, imagino que REDIS_URL quebrou no gem Redis (não substituindo mais outras opções), e não pelo Discourse (onde o código relacionado não mudou)?
Provavelmente este commit quebrou: Use redis-client as transport · redis/redis-rb@08a2100 · GitHub
Eu reportaria no repositório do gem Redis, ou alguém sabe se é um problema com a forma como o Discourse o implementa?
A variável de ambiente, aliás, é passada corretamente. Eu a deixei no lugar e apenas configurei o Redis para não escutar no socket UNIX, e enquanto o unicorn inicia bem, o sidekiq falha, sentindo falta do socket UNIX em vez disso
:
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'
Isso se encaixa no quadro de que REDIS_URL ainda funciona, mas apenas se as configurações de conexão não forem definidas de outra forma. Olhando o rastreamento de erro, global_setting.rb não aplica host e porta para o sidekiq, como faz para o unicorn.