Se me ocurren dos posibilidades:
-
Hay algo configurando
ENV['REDIS_URL']
antes de que se ejecute el inicializador? Por ejemplo, tal vez tenga un.env
archivo registrado en git que anula la variable Heroku? -
Dices que este código es de
redis.rb
. ¿Tiene unconfig/initializers/resque.rb
? ¿además? ¿Qué pasa conconfig/resque.yml
? ? Cualquiera de los dos puede ser también tratando de abrir una conexión Redis. (Si pudiera publicar el seguimiento completo de la pila de su error, podría confirmarlo o descartarlo). ¿O está usando Redis para algo que no sea Resque?
También podría hacer una depuración de printf y cambiar su inicializador para que diga:
if Rails.env.production?
puts "production: #{ENV['REDIS_URL']}"
uri = URI.parse(ENV["REDIS_URL"])
else
puts "not production"
uri = URI.parse("redis://localhost:6379")
end
Eso debería ayudarte a aclarar lo que está pasando. (Es posible que deba usar Rails.logger.info
en lugar de puts
.)
EDITAR: ¡Ese seguimiento de la pila es muy útil! Efectivamente, su propio inicializador no está allí en absoluto, pero hay otro código que intenta cargar su propia conexión redis, aquí:
remote: /tmp/build_329306a238b046dda86a54d29db48f4c/vendor/bundle/ruby/2.4.0/gems/resque-web-0.0.9/config/initializers/resque_config.rb:4:in `<top (required)>'
Si buscas esa gema, puedes ver que está haciendo esto:
require 'resque'
config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config
Así que creo que la respuesta es establecer RAILS_RESQUE_REDIS
además a REDIS_URL
. Puedes usar Heroku config:set
comando para hacer eso.