セッションの格納先をmemcacheにする。
やり方
memcache-clientのgemをインストール(追記あり)
gem install memcache-client
追記(2008/11/20)
rails2.1からはmemcache-clientが同梱されていました。(rails2.0にはなかったです)
なのでgemのインストールは不要になりました。
activesupportの中にありますソース見た感じ一緒でした(ちょびっとリファクタしてるっぽかったですが)。
ruby_lib\gems\1.8\gems\activesupport-2.1.2\lib\active_support\vendor\memcache-client-1.5.0
enviroment.rb
(省略) Rails::Initializer.run do |config| (省略) config.action_controller.session = { :session_key => '_アプリ名_session', :secret => 'セキュアな文字列(ランダムな文字列等)' } config.action_controller.session_store = :mem_cache_store (省略) end memcache_options = { :namespace => "アプリ名-session-#{ENV['RAILS_ENV']}", :readonly => false } SESSION_CACHE = MemCache.new([ APP_CONF_SESSION_MEMCACHE_HOST ], memcache_options) ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS.merge!({ 'cache' => SESSION_CACHE, 'expires' => 30.minute })
memcache_optionsに渡せるoptionは3つらしい(ソース見た感じ)
:namespace、:readonly、:multithread
(rails1.2 までは別のライブラリRuby-MemCacheというのを使っていたので引数が少なくなってるらしい
昔は:compression、:debug、:urlencodeがあった。
)
CookieStoreから変更したので
application.rbのprotect_from_forgeryの:secretのコメントを外す。
class ApplicationController < ActionController::Base helper :all # include all helpers, all the time # See ActionController::RequestForgeryProtection for details # Uncomment the :secret if you're not using the cookie session store protect_from_forgery :secret => 'セキュアな文字列(ランダムな文字列等)'
以上で完了
いろいろググって調べたつもりだけど
大抵下記のオフィシャル情報をみんな見てやってるらしい。
http://wiki.rubyonrails.org/rails/pages/HowtoChangeSessionStore
けどこれだとtimeoutのexpiresが指定されていなく、デフォルトの0秒が使われてしまう。
なんか1日たってもログアウトしないなーと思ってたら永遠の設定らしい。。(よくあるデフォルト値が30分とかではなかった。。)
ググってもわからなかったのでソースを見たら
DEFAULT_SESSION_OPTIONSにexpiresという引数があったので、それを指定したらうまくいった!
expiresのために参照したソース
\ruby_lib\gems\1.8\gems\actionpack-2.1.2\lib\action_controller\session\mem_cache_store.rb