Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis versucht, anstelle von REDIS_URL eine Verbindung zu localhost auf Heroku herzustellen

Mir fallen zwei Möglichkeiten ein:

  • Ist etwas, das ENV['REDIS_URL'] einstellt bevor der Initialisierer läuft? Vielleicht haben Sie zum Beispiel eine .env in Git eingecheckte Datei, die die Heroku-Variable überschreibt?

  • Sie sagen, dieser Code stammt von redis.rb . Haben Sie eine config/initializers/resque.rb zudem? Was ist mit config/resque.yml ? Beides kann auch sein versuchen, eine Redis-Verbindung zu öffnen. (Wenn Sie den gesamten Stack-Trace Ihres Fehlers posten könnten, könnten Sie dies bestätigen oder ausschließen.) Oder verwenden Sie Redis für etwas anderes als Resque?

Sie könnten auch etwas printf-Debugging durchführen und Ihren Initialisierer so ändern, dass er sagt:

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

Das sollte Ihnen helfen zu klären, was los ist. (Möglicherweise müssen Sie Rails.logger.info verwenden statt puts .)

BEARBEITEN: Dieser Stack-Trace ist sehr hilfreich! Sicher genug, Ihr eigener Initialisierer ist überhaupt nicht drin, aber es gibt anderen Code, der versucht, seine eigene Redis-Verbindung zu 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)>'

Wenn Sie diesen Edelstein nachschlagen, können Sie sehen, dass er Folgendes tut:

require 'resque'

config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config

Ich denke also, die Antwort ist, RAILS_RESQUE_REDIS zu setzen zusätzlich zu REDIS_URL . Sie können das config:set von Heroku verwenden Befehl dazu.