Posso pensar em duas possibilidades:
-
Algo está configurandoENV['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 é deredis.rb
. Você tem umconfig/initializers/resque.rb
Além disso? E sobreconfig/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.