ChacheStoreでセッション情報が保存されない

Railsでセッション情報を保存するには、以下の3通りがあります。

1. クッキー(CookieStore)
2. キャッシュ(CacheStore)
3. データベース(ActiveRecordStore)

『Ruby on Rails 5アプリケーションプログラミング』によりますと、CacheStoreは「さほど重要でない短命なデータの保存に利用」とあります。

CookieStoreだとデータサイズが4KBに制限されてしまうので、なんとかしてCacheStoreを使ってみたいと思いました。

config/initializers/session_store.rbを開き、以下のように編集します。

(修正前)

Rails.application.config.session_store :cookie_store, key: '_lesson_session'

   ↓
(修正後)

Rails.application.config.session_store :cache_store, key: '_lesson_session'

そして、Puma(ウェブサーバー)を再起動して実験してみると・・・

見事に動きません。 🙁

保存したはずのセッションデータを取得できないどころか、サーバーに保存されているはずのセッションデータが見当たりません。

何かがおかしいようです。

解決策

config/environments/development.rbを調べてみると、以下の部分でCacheStoreの設定をしているみたいです。

  if Rails.root.join('tmp/caching-dev.txt').exist?
    config.action_controller.perform_caching = true

    config.cache_store = :memory_store

    config.public_file_server.headers = {
      'Cache-Control' => 'public, max-age=172800'
    }
  else
    config.action_controller.perform_caching = false

    config.cache_store = :null_store
  end

これによりますと、アプリケーショントップ/tmp/caching-dev.txtというファイルがないと、CacheStoreは使えないということのようです。

したがって、以下のように強引にファイルを作りました。

$ touch tmp/caching-dev.txt

そして、Pumaを再起動後、セッション情報を書き込むプログラムを実行したら、今度はちゃんと動きましたとさ。 🙂

ただ、tmp/caching-dev.txtをこのようにして作成するのが正しいのかまでは、今のところわかりません。

Ruby on Rails 5 アプリケーションプログラミング読解物語 © 2017 Frontier Theme