Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Redis tenta se conectar ao localhost no Heroku em vez de REDIS_URL


Posso pensar em duas possibilidades:

  • Algo está configurando ENV['REDIS_URL'] antes do inicializador ser executado? Por exemplo, talvez você tenha um .env arquivo verificado no git que está substituindo a variável Heroku?

  • Você diz que este código é de redis.rb . Você tem um config/initializers/resque.rb Além disso? E sobre config/resque.yml ? Qualquer um deles pode ser também tentando abrir uma conexão Redis. (Se você pudesse postar todo o rastreamento de pilha do seu erro, você poderia confirmar isso ou descartá-lo.) Ou você está usando o Redis para algo diferente do Resque?

Você também pode fazer alguma depuração de printf e alterar seu inicializador para dizer:
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

Isso deve ajudá-lo a esclarecer o que está acontecendo. (Você pode precisar usar Rails.logger.info em vez de puts .)

EDITAR: Esse rastreamento de pilha é muito útil! Com certeza, seu próprio inicializador não está lá, mas há outro código tentando carregar sua própria conexão redis, aqui:
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)>'

Se você procurar essa gema, poderá ver que ela está fazendo isso:
require 'resque'

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

Então, acho que a resposta é definir RAILS_RESQUE_REDIS além para REDIS_URL . Você pode usar o Heroku config:set comando para fazer isso.