неверный URI (не URI?): 'redis: //redis.xxx.ng.0001.apse1.cache.amazonaws.com: 6379/1' URI :: InvalidURIError Рельсы с aws-редисом - PullRequest
0 голосов
/ 05 октября 2019

У меня возникла странная проблема из пассажирского докера ruby ​​2.3 с aws redis:

bad URI(is not URI?): 'redis://redis.xxx.ng.0001.apse1.cache.amazonaws.com:6379/1' (URI::InvalidURIError)
  /usr/local/rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/uri/rfc3986_parser.rb:67:in `split'
  /usr/local/rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/uri/rfc3986_parser.rb:73:in `parse'
  /usr/local/rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/uri/common.rb:227:in `parse'
  /usr/local/rvm/gems/ruby-2.3.8/gems/sidekiq-5.2.7/lib/sidekiq/redis_connection.rb:97:in `log_info'
  /usr/local/rvm/gems/ruby-2.3.8/gems/sidekiq-5.2.7/lib/sidekiq/redis_connection.rb:31:in `create'
  /usr/local/rvm/gems/ruby-2.3.8/gems/sidekiq-5.2.7/lib/sidekiq.rb:126:in `redis_pool'
  /usr/local/rvm/gems/ruby-2.3.8/gems/sidekiq-5.2.7/lib/sidekiq.rb:94:in `redis'

Мой конфиг sidekiq:

# ENV['REDIS_URL']= redis://redis.xxx.ng.0001.apse1.cache.amazonaws.com:6379/1
Sidekiq.configure_server do |config|
  config.redis = { url: ENV['REDIS_URL'] }
end

Sidekiq.configure_client do |config|
  config.redis = { url: ENV['REDIS_URL'] }
end

Однако, если я запустил:

docker exec -it container_id bash

и затем rails console все вроде бы работает просто отлично.

Я тоже пробовал это:

redis_url = ENV['REDIS_URL']

# The statement below parsed successfully thus the redis_url is correct
uri = URI.parse(redis_url)

redis_options = {
  host: uri.host,
  port: 6379,
  db: uri.path[1..-1]
}

Sidekiq.configure_server do |config|
  config.redis = redis_options
end

Sidekiq.configure_client do |config|
  config.redis = redis_options
end

Но поднялось точно так жеошибка. Я мог бы запустить докер локально подключенный к локальному Redis просто отлично. Мне интересно, что может быть что-то не так со значением ENV ['REDIS_URL'].

Кто-нибудь испытывает эту проблему или есть какие-то подсказки?

Мой env is - пассажирский док рубин 2.3. 8 - AWS упругий кэш-редис: 5.0.5 - sidekiq 5.2.7

enter image description here

1 Ответ

0 голосов
/ 06 октября 2019

Через много часов я просто понимаю, что redis_url из контейнера был указан на удаленном кластере Redis в aws. Мой первый запуск Redis был установлен по умолчанию на тип r5 16GM, который очень большой и дорогой для тестирования. Я решил запустить новый с небольшим t2 и удалил r5, чтобы сэкономить деньги, однако в конфигурации для пассажиров у меня установлен REDIS_URL, и Nginx переопределяет значение env по сравнению с тем, которое я установил в задаче ECS.

Ошибка, вызванная ruby ​​Redis, не является простой, и наличие двух мест для установки ENV (в конфигурации Nginx и в задаче ECS) делает отладку болезненной.

...