【发布时间】:2020-02-03 15:35:30
【问题描述】:
我在使用 aws redis 的乘客 docker ruby 2.3 中遇到了一个奇怪的问题:
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 控制台一切似乎都正常。
我也试过这个:
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 的 docker 就好了。我想知道 ENV['REDIS_URL'] 值可能有问题。
有没有人遇到过这个问题或者有什么线索?
我的环境是 - 乘客码头红宝石 2.3.8 - aws弹性缓存redis:5.0.5 -sidekiq 5.2.7
【问题讨论】:
-
这似乎是一个愚蠢的问题,您是否检查了管理控制台中的端点,它在我看来格式不正确。 docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/…
-
@DavidWebster 格式错误?你能指出我吗?我正在使用 aws redis 测试 ECS。它工作得很好,然后我尝试了一个新的 docker,因为它引发了 redis 的问题,然后我多次修改并删除了 redis 以查看不同的设置。
-
这可能是 Ruby 2.3.8 中 URI 解析器中的一个错误。尝试在 Ruby 2.3.8 和 2.5.0(更高版本)中运行以下命令:
URI.parse('redis://redis.xxx.ng.0001.apse1.cache.amazonaws.com:6379/1')。我无法在 2.5.0 版中重现该语句的任何问题。我没有版本 2.3.8 来检查这个。 -
@PeterO。它解析没有任何问题。
标签: ruby-on-rails passenger sidekiq amazon-ecs amazon-elasticache