Napadají mě dvě možnosti:
-
Nastavuje něco
ENV['REDIS_URL']
před spuštěním inicializátoru? Možná máte například.env
soubor zkontrolován do git, který přepisuje proměnnou Heroku? -
Říkáte, že tento kód pochází z
redis.rb
. Máteconfig/initializers/resque.rb
taky? Co třebaconfig/resque.yml
? Kterákoli z nich může být také pokusu o otevření připojení Redis. (Pokud byste mohli odeslat celou stopu zásobníku vaší chyby, můžete to potvrdit nebo vyloučit.) Nebo používáte Redis pro něco jiného než Resque?
Můžete také provést nějaké ladění printf a změnit svůj inicializátor na:
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 by vám mělo pomoci objasnit, co se děje. (Možná budete muset použít Rails.logger.info
místo puts
.)
UPRAVIT: To trasování zásobníku je velmi užitečné! Jistě, váš vlastní inicializátor tam vůbec není, ale existuje jiný kód, který se pokouší načíst své vlastní redis připojení, zde:
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)>'
Když se podíváte na ten drahokam, můžete vidět, že dělá toto:
require 'resque'
config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config
Takže si myslím, že odpovědí je nastavit RAILS_RESQUE_REDIS
navíc na REDIS_URL
. Můžete použít Heroku config:set
příkaz k tomu.