Redis
 sql >> Base de données >  >> NoSQL >> Redis

Redis essaie de se connecter à localhost sur Heroku au lieu de REDIS_URL

Je peux penser à deux possibilités :

  • Est-ce que quelque chose définit ENV['REDIS_URL'] avant que l'initialiseur ne s'exécute ? Par exemple, vous avez peut-être un .env fichier archivé dans git qui remplace la variable Heroku ?

  • Vous dites que ce code provient de redis.rb . Avez-vous un config/initializers/resque.rb aussi? Qu'en est-il de config/resque.yml ? L'un ou l'autre peut être aussi essayant d'ouvrir une connexion Redis. (Si vous pouviez publier la trace complète de la pile de votre erreur, vous pourriez le confirmer ou l'exclure.) Ou utilisez-vous Redis pour autre chose que Resque ?

Vous pouvez également effectuer un débogage printf et modifier votre initialiseur pour dire :

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

Cela devrait vous aider à clarifier ce qui se passe. (Vous devrez peut-être utiliser Rails.logger.info au lieu de puts .)

MODIF : Cette trace de pile est très utile ! Effectivement, votre propre initialiseur n'est pas du tout là-dedans, mais il y a un autre code essayant de charger sa propre connexion redis, ici :

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 vous recherchez cette gemme, vous pouvez voir qu'elle fait ceci :

require 'resque'

config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config

Je pense donc que la réponse est de définir RAILS_RESQUE_REDIS en plus vers REDIS_URL . Vous pouvez utiliser le Heroku config:set commande pour le faire.