sql >> Base de Datos >  >> NoSQL >> Redis

Redis intenta conectarse a localhost en Heroku en lugar de REDIS_URL

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 un config/initializers/resque.rb? ¿además? ¿Qué pasa con config/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.