Mi vengono in mente due possibilità:
-
Qualcosa sta impostando
ENV['REDIS_URL']
prima dell'esecuzione dell'inizializzatore? Ad esempio, forse hai un.env
file archiviato in git che sta sovrascrivendo la variabile Heroku? -
Dici che questo codice proviene da
redis.rb
. Hai unconfig/initializers/resque.rb
anche? Che dire diconfig/resque.yml
? Entrambi possono essere anche cercando di aprire una connessione Redis. (Se potessi pubblicare l'intera traccia dello stack del tuo errore, potresti confermarlo o escluderlo.) O stai usando Redis per qualcosa di diverso da Resque?
Potresti anche eseguire un po 'di debug di printf e cambiare il tuo inizializzatore per 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
Questo dovrebbe aiutarti a chiarire cosa sta succedendo. (Potrebbe essere necessario utilizzare Rails.logger.info
invece di puts
.)
MODIFICA: Quella traccia dello stack è molto utile! Abbastanza sicuro, il tuo inizializzatore non è affatto lì, ma c'è altro codice che tenta di caricare la propria connessione redis, qui:
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)>'
Se cerchi quella gemma, puoi vedere che sta facendo questo:
require 'resque'
config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config
Quindi penso che la risposta sia impostare RAILS_RESQUE_REDIS
in aggiunta a REDIS_URL
. Puoi usare Heroku config:set
comando per farlo.