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 eineconfig/initializers/resque.rb
zudem? Was ist mitconfig/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.