sql >> Database >  >> NoSQL >> Redis

Redis probeert verbinding te maken met localhost op Heroku in plaats van REDIS_URL

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 een config/initializers/resque.rb ook? Hoe zit het met config/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.



  1. Sleutels vinden die niet verlopen zijn in Redis

  2. ClusterControl op AWS implementeren om uw clouddatabase te beheren

  3. MongoDB $ bereik

  4. Hoogwaardige MongoDB-clusters op Amazon EC2