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 unconfig/initializers/resque.rb
aussi? Qu'en est-il deconfig/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.