起こったこと
RailsアプリでHotwireのWebSocketを導入時に、Redisが必要になった。
HerokuそれをHerokuにデプロイしたら、Redisを使う場面で以下のエラーになった。
redis::CannotConnectError (SSL_connect returned=1 errno=0 peeraddr=34.232.151.103:20700 state=error: certificate verify failed (self-signed certificate in certificate chain) (rediss://ec2-XXXXXXXXXX.amazonaws.com:000000)):
Herokuの公式ドキュメントにある、RailsでRedisに接続するためのコードは実装していた。
config/initializers/redis.rb
$redis = Redis.new(url: ENV["REDIS_URL"], ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE })
環境変数、REDIS_URL
やREDIS_TLS_URL
などの設定も問題なさそう。
結論
WebSocketを使う場合、以下の設定も必要でした。
config/cable.yml
production:
adapter: redis
url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
channel_prefix: name_production
ssl_params:
verify_mode: <%= OpenSSL::SSL::VERIFY_NONE %>
単純にHotwireを使うだけではRedisは必要ない。
▼実装の参考にした記事
https://zenn.dev/shita1112/books/cat-hotwire-turbo/viewer/turbo-streams-websocket
HotwireでWebSocketを使っていたからRedisが必要だった。
Hotwireだから設定が必要なのではなく、WebSocketを使っていたから設定が必要だと気付ければ、もっと早く解決できたかもしれない。