RailsのセッションをAWSのElastiCache Redisで管理しようとしていたがしばらくsession_idを保存できずハマった。Railsのバージョンは7.0.2
接続できない時の確認方法の備忘録
確認方法
まずrails consoleからRedisに繋がるか確認する。
redisのインスタンスを作る時に設定ファイルの内容と同じurlを使う
設定ファイル(config/environments/production.rb)の例
config.cache_store = :redis_cache_store, { expires_in: 1.day, url: "redis://redis-hogehuga.msqvif.ng.0001.apne1.cache.amazonaws.com:6379/0" }
bundle exec rails c redis = Redis.new(url: "redis://redis-hogehuga.msqvif.ng.0001.apne1.cache.amazonaws.com:6379/0") redis.ping
設定ファイルの書き方に問題があればRedis.newでエラーになるしセキュリティグループやネットワークに問題があればpingが通らない
自分の場合ここでpingが通ったから安心したらElastiCacheのエンドポイント間違えててしばらくハマった。
リーダエンドポイントではなくプライマリエンドポイントを指定しないといけないのでconsoleから適当なデータ書き込めるか一応確認した方がよかった。
redis.set("mykey", "hello world") redis.get("mykey")
ここで書き込み不可能になっていてもrailsのcontrollerからsession作るときにエラー出してくれないっぽい
class SessionsController < ApplicationController def create user = User.find(params[:id]) session['user_id'] = user.id # ここで書き込みエラーになってもrailsがraiseしてくれないっぽい rescue => error render json: { errMessage: error } end end