¿Alguien más ha notado que REDIS_URL ya no tiene ningún efecto? Durante la (re)compilación y también al iniciar el contenedor, a pesar de que REDIS_URL está configurado para conectarse a través de un socket UNIX, intenta conectarse a través de redis://localhost:6379.
Por un lado, tiene sentido, ya que Discourse tiene configuraciones para host y puerto y solo las aplica: discourse/app/models/global_setting.rb at main · discourse/discourse · GitHub
Habría un parámetro path para definir una ruta de socket UNIX, que anularía el host y el puerto. Y habría un parámetro url, para definir una URL completa como unix:///shared/redis_data/redis.sock.
La gema de Redis documenta que la variable de entorno REDIS_URL anularía cualquier otra configuración, y hasta cierta versión de la gema Discourse/Redis esto funcionaba: redis-rb/lib/redis.rb at master · redis/redis-rb · GitHub
El uso del socket UNIX se rompió cuando Discourse pasó a la versión 5 de las gemas de Redis: DEV: Upgrade the Redis gem to v5.4 · discourse/discourse@2ed31fe · GitHub
Así que supongo que REDIS_URL se rompió en la gema de Redis (ya no anula otras opciones), y no por Discourse (donde el código relacionado no cambió).
Probablemente este commit lo rompió: Use redis-client as transport · redis/redis-rb@08a2100 · GitHub
¿Lo informaría en el repositorio de la gema de Redis, o alguien sabe que es un problema con la forma en que Discourse lo implementa?
La variable de entorno, por cierto, se pasa correctamente. La dejé en su lugar y solo configuré Redis para que no escuchara en el socket UNIX, y mientras unicorn se inicia sin problemas, sidekiq falla, echando de menos el socket UNIX en su lugar
:
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'
Encaja en el cuadro que REDIS_URL todavía funciona, pero solo si la configuración de conexión no está definida de otra manera. Mirando el rastro del error, global_setting.rb no aplica el host y el puerto para sidekiq, como lo hace para unicorn.