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

Redis forsøger at oprette forbindelse til localhost på Heroku i stedet for REDIS_URL

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 en config/initializers/resque.rb også? Hvad med config/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.



  1. Har MongoDB en indbygget REST-grænseflade?

  2. Hvorfor Redis SortedSet bruger Skip List i stedet for Balanced Tree?

  3. Om MongoDB

  4. MongoDB $asin