微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Heroku Redis - Redis::CannotConnectError: 在 127.0.0.1:6372 上连接到 Redis 时出错 - 证书验证失败

如何解决Heroku Redis - Redis::CannotConnectError: 在 127.0.0.1:6372 上连接到 Redis 时出错 - 证书验证失败

当我在 Heroku 上第一次调用 sidekiq 时,抛出以下错误

Redis::CannotConnectError: Error connecting to Redis on 127.0.0.1:6372

这当然不是我的 Heroku:Redis 的 IP。该 URL 在我的 ENV 变量中定义为:

rediss://:blahblah@ecmore-numbers-here.compute-1.amazonaws.com:port

有趣的是,我在 Heroku 控制台中这样做了:

redis = Redis.new

正确返回:

=> #<Redis client v4.2.5 for redis://blah-blah-blah.compute-1.amazonaws.com:port/0>

但是当我这样做时:

redis.set("hey","you")

我明白了:

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=error: certificate verify Failed (self signed certificate in certificate chain))

我的 sidekiq.rb

中有以下内容
require 'sidekiq'

Sidekiq.configure_client do |config|
  Sidekiq::Status.configure_client_middleware config,expiration: 30.minutes
  if Rails.env.production?
    url = URI.parse(ENV["REdis_URL"])
    url.scheme = "rediss"
    url.port = Integer(url.port) + 1
    config.redis = {
      url: url.to_s,network_timeout: 5,ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE }
    }
  end
end

Sidekiq.configure_server do |config|
  Sidekiq::Status.configure_server_middleware config,expiration: 30.minutes
  Sidekiq::Status.configure_client_middleware config,ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE }
    }
  end
end

这是我的redis.rb

require 'uri'
url = URI.parse(ENV["REdis_URL"])
url.scheme = "rediss"
url.port = Integer(url.port) + 1
$redis = Redis.new(url: url,driver: :ruby,ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE })

procfile

release: bin/rails db:migrate
web: bin/start-stunnel bin/rails server -p ${PORT:-5000} -e $RAILS_ENV
worker: bin/start-stunnel bundle exec sidekiq

我正在跑步 Redis - 4.2.5 sidekiq - 6.2.0 红宝石 - 2.6.5

解决方法

所以它是一个 ssl 验证证书错误。我遇到了同样的错误,并通过 github 找到了解决方案

我尝试将verify_mode发送到redis实例的ssl_paramss中,如下所示

redis = Redis.new(ssl_params: {verify_mode: OpenSSL::SSL::VERIFY_NONE})

你可以找到https://github.com/redis/redis-rb/issues/940

还有另一个标志 ssl: true or false 你也可以使用它

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。