Ik kan twee mogelijkheden bedenken:
-
Stelt iets
ENV['REDIS_URL']
in? voordat de initialisatie wordt uitgevoerd? Misschien heb je bijvoorbeeld een.env
bestand ingecheckt in git dat de Heroku-variabele overschrijft? -
Je zegt dat deze code afkomstig is van
redis.rb
. Heeft u eenconfig/initializers/resque.rb
ook? Hoe zit het metconfig/resque.yml
? Een van beide kan ook . zijn proberen een Redis-verbinding te openen. (Als u de volledige stacktracering van uw fout zou kunnen posten, zou u dit kunnen bevestigen of uitsluiten.) Of gebruikt u Redis voor iets anders dan Resque?
Je zou ook wat printf-foutopsporing kunnen doen en je initialisatie wijzigen om te zeggen:
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
Dat zou je moeten helpen om duidelijk te maken wat er aan de hand is. (Mogelijk moet u Rails.logger.info
gebruiken in plaats van puts
.)
BEWERKEN: Die stacktracering is erg handig! En ja hoor, je eigen initializer zit er helemaal niet in, maar er is een andere code die zijn eigen redis-verbinding probeert te laden, hier:
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)>'
Als je die edelsteen opzoekt, kun je zien dat hij dit doet:
require 'resque'
config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config
Dus ik denk dat het antwoord is om RAILS_RESQUE_REDIS
. in te stellen aanvullend naar REDIS_URL
. U kunt de Heroku config:set
. gebruiken commando om dat te doen.