Redis
 sql >> Database >  >> NoSQL >> Redis

Redis tenta di connettersi a localhost su Heroku invece di REDIS_URL

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 un config/initializers/resque.rb anche? Che dire di config/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.