スポンサーリンク
概要
Heroku上でRedisのバージョンアップを実施後に、Railsアプリで接続が不可能になった際の解決メモ。
スポンサーリンク
スポンサーリンク
背景
HerokuではRedisを利用可能なプラグインが提供されおり、Railsアプリ等でRedisを使用可能です。
Hobby Devプランといった無料で使用可能なプランも提供されており、ちょっとしたWEBサイトで使用する分には問題ないレベルで使用できます。
Hobby DevプランのRedisに関して、下記のようなバージョン4と5のサポート停止がアナウンスされておりバージョン6への移行がアナウンサれています。
https://devcenter.heroku.com/articles/heroku-redis-hobby-deprecation
今回、バージョン6への移行を行ったのですが、移行後に下記のようなエラーがRailsのログに出力されるようになってしまい、Redisに接続が出来ていない事がわかりました。
1 |
error accepting a client connection: error:1408f10b:ssl routines:ssl3_get_record:wrong version number |
スポンサーリンク
スポンサーリンク
解決方法
どうやら、Redis6からTLSでの接続が要求されるように変わったようです。
ですが、Heroku内部ではSSLを無効化してHTTPにフォアワードして接続しているため、SSLでの接続をOFFにして接続すれば良いようです。
https://stackoverflow.com/questions/65834575/how-to-enable-tls-for-redis-6-on-sidekiq
という事で、下記のようにssl_paramsを追加して実施してみました。
1 |
config.cache_store = :redis_cache_store, { url: ENV["REDIS_URL"], ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } } |
結果として、残念ながら症状が変わらず。
公式のドキュメントを見ると、どうやらこれだけでは足らないようです。
https://devcenter.heroku.com/ja/articles/securing-heroku-redis
スポンサーリンク
要約すると、下記のようにする必要がある。
- URLはredisではなく、redissとする。
- 使用するRedisのポートに+1した番号を使用する。
heroku config | grep REDIS でREDIS関係のURL設定を確認すると下記のようになっていた。
1 2 3 |
HEROKU_REDIS_CYAN_TLS_URL: rediss://:xxxx@ec2-xxxx.compute-1.amazonaws.com:13890 HEROKU_REDIS_CYAN_URL: redis://:xxxx@ec2-xxxx.compute-1.amazonaws.com:13889 REDIS_URL: redis://:xxxx@ec2-xxxx.compute-1.amazonaws.com:13890 |
Reids関係の環境変数は、Redis作成時に自動で設定されるようで、色の名前(CYAN)が付いたものが自動で作成されるようです。
HEROKU_REDIS_CYAN_TLS_URLがそのまま使えそうなので、そのまま使うかREDIS_URLを書き換えて、redissで接続するようにすれば良さそうです。
スポンサーリンク
上記の通り正しいURLとssl_paramsを設定する事でエラーが発生せずに接続する事ができました。