Sinatraでセッション管理をredisでやろうとしたらちょっと困った話

sinatra勉強中で、セッションの管理をデフォルトのクッキーではなくredisでやりたいなと。
んでちょっと調べたら良さそうなのがあると。
 
https://github.com/vangberg/rack-session-redis  
使い方も簡単そうだしいいね!てことでちょっと使ってみることに。

  • Usage

READMEそのままでOKです。

Gemfile
1
gem 'rack-session-redis'
config.ru
1
2
3
4
5
6
7
require "rack/session/redis"

use Rack::Session::Redis, {
  :url          => "redis://localhost:6379/0",
  :namespace    => "rack:session",
  :expire_after => 600
}

あとは普通にsession['name']とかで使用するだけ。簡単幸せです(´ω`)

 
1
2
3
4
get '/' do
  session['name'] = youyo
  haml :index
end
  • しかししかし削除がうまくいかない…
 
1
2
3
4
get '/logout' do
  session.clear
  redirect '/'
end

とかやれば通常のクッキーベースのセッションであればクリアされるのですが、何故か消えない…
ググったところこれはバグでもうすでに直っているそうです。(https://github.com/vangberg/rack-session-redis/commits/)
 
あれ?じゃあ、なんでdelete失敗してるの?って思ってコードみたら直ってなかった…
 
 

なるほど。gemでインストールできるのではなく最新を持ってこい。と。

  • Bundlerでgithubから直接ソースを取得する

こちらを参考にGemfileを修正。

Gemfile
1
gem 'rack-session-redis', :git => "git://github.com/vangberg/rack-session-redis.git"

あとは再インストール。簡単ですね(´ω`)
無事session.clear動きました!

Comments