yikegaya’s blog

仕事関連(Webエンジニア)と資産運用について書いてます

RailsのセッションがElastiCacheに書き込めなかった時の対応メモ

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