Przychodzą mi do głowy dwie możliwości:
-
Czy coś ustawia
ENV['REDIS_URL']przed uruchomieniem inicjatora? Na przykład może masz plik.envplik wpisany do git, który nadpisuje zmienną Heroku? -
Mówisz, że ten kod pochodzi z
redis.rb. Czy masz plikconfig/initializers/resque.rb? także? A co zconfig/resque.yml? ? Każdy z nich może być również próbuje otworzyć połączenie Redis. (Jeśli możesz opublikować cały ślad stosu swojego błędu, możesz to potwierdzić lub wykluczyć.) A może używasz Redis do czegoś innego niż Resque?
Możesz także przeprowadzić debugowanie printf i zmienić inicjator tak, aby mówił:
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
To powinno pomóc ci wyjaśnić, co się dzieje. (Może być konieczne użycie Rails.logger.info zamiast puts .)
EDYTUJ: Ten ślad stosu jest bardzo pomocny! Rzeczywiście, Twojego własnego inicjatora w ogóle tam nie ma, ale jest inny kod, który próbuje załadować własne połączenie redis, tutaj:
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)>'
Jeśli spojrzysz na ten klejnot, zobaczysz, że robi to:
require 'resque'
config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config
Myślę więc, że odpowiedzią jest ustawienie RAILS_RESQUE_REDIS dodatkowo na REDIS_URL . Możesz użyć Heroku config:set polecenie, aby to zrobić.