Jeg kan komme i tanke om to muligheder:
-
Er der noget, der sætter
ENV['REDIS_URL']
før initialiseringen kører? For eksempel har du måske en.env
fil tjekket ind i git, der tilsidesætter Heroku-variablen? -
Du siger, at denne kode er fra
redis.rb
. Har du enconfig/initializers/resque.rb
også? Hvad medconfig/resque.yml
? Begge disse kan også være forsøger at åbne en Redis-forbindelse. (Hvis du kunne sende hele stak-sporet af din fejl, kan du bekræfte dette eller udelukke det.) Eller bruger du Redis til andet end Resque?
Du kan også lave noget printf-fejlretning og ændre din initialisering til at sige:
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
Det burde hjælpe dig med at afklare, hvad der foregår. (Du skal muligvis bruge Rails.logger.info
i stedet for puts
.)
EDIT: Det stakspor er meget nyttigt! Sikkert nok er din egen initializer slet ikke derinde, men der er en anden kode, der forsøger at indlæse sin egen redis-forbindelse, her:
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)>'
Hvis du slår op på den perle, kan du se, at den gør dette:
require 'resque'
config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config
Så jeg tror, at svaret er at indstille RAILS_RESQUE_REDIS
derudover til REDIS_URL
. Du kan bruge Heroku config:set
kommando til at gøre det.