Сещам се за две възможности:
-
Нещо задава ли
ENV['REDIS_URL']
преди да стартира инициализаторът? Например може би имате.env
файл, проверен в git, който отменя променливата Heroku? -
Казвате, че този код е от
redis.rb
. Имате лиconfig/initializers/resque.rb
също? Какво ще кажете заconfig/resque.yml
? Всеки от тях може да е също опитвайки се да отворите Redis връзка. (Ако бихте могли да публикувате цялата трасировка на стека на вашата грешка, бихте могли да потвърдите това или да я изключите.) Или използвате Redis за нещо различно от Resque?
Можете също така да извършите отстраняване на грешки в printf и да промените инициализатора си, за да каже:
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
Това трябва да ви помогне да изясните какво се случва. (Може да се наложи да използвате Rails.logger.info
вместо puts
.)
РЕДАКТИРАНЕ: Това проследяване на стека е много полезно! Разбира се, вашият собствен инициализатор изобщо не е там, но има друг код, който се опитва да зареди своя собствена redis връзка, тук:
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)>'
Ако погледнете този скъпоценен камък, можете да видите, че прави това:
require 'resque'
config = ENV.fetch("RAILS_RESQUE_REDIS", "127.0.0.1:6379")
Resque.redis = config
Така че мисля, че отговорът е да зададете RAILS_RESQUE_REDIS
в допълнение към REDIS_URL
. Можете да използвате Heroku config:set
команда за това.