Saya dapat memikirkan dua kemungkinan:
-
Apakah ada sesuatu yang mengatur
ENV['REDIS_URL']
sebelum penginisialisasi berjalan? Misalnya mungkin Anda memiliki.env
file diperiksa ke git yang menimpa variabel Heroku? -
Anda mengatakan kode ini dari
redis.rb
. Apakah Anda memilikiconfig/initializers/resque.rb
juga? Bagaimana denganconfig/resque.yml
? Salah satu dari mereka mungkin juga mencoba membuka koneksi Redis. (Jika Anda dapat memposting seluruh jejak tumpukan kesalahan Anda, Anda dapat mengonfirmasi ini atau mengesampingkannya.) Atau apakah Anda menggunakan Redis untuk apa pun selain Resque?
Anda juga dapat melakukan beberapa proses debug printf dan mengubah penginisialisasi Anda menjadi:
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
Itu akan membantu Anda mengklarifikasi apa yang sedang terjadi. (Anda mungkin perlu menggunakan Rails.logger.info
alih-alih puts
.)
EDIT: Jejak tumpukan itu sangat membantu! Benar saja, penginisialisasi Anda sendiri tidak ada di sana sama sekali, tetapi ada kode lain yang mencoba memuat koneksi redisnya sendiri, di sini:
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)>'
Jika Anda mencari permata itu, Anda dapat melihatnya melakukan ini:
require 'resque'
config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config
Jadi saya pikir jawabannya adalah untuk mengatur RAILS_RESQUE_REDIS
sebagai tambahan ke REDIS_URL
. Anda dapat menggunakan config:set
Heroku perintah untuk melakukan itu.