11

dalli gem を使用する Rails 4 では、memcached をセッション ストアとして使用できません。

これが私がやったことです。

Gemfile に dalli gem を追加しました

gem 'dalli'

config/initializers/session_store.rb に次の行を追加しました

Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 20.minutes

そして、development.rbに次の行を追加しました

config.cache_store = :dalli_store

memcached server を起動せずにシンサーバーで開発サーバーを起動すると、通常どおりログインできます。memcached サーバーが実行されていないなどのエラーが発生する必要がありますか。

Rails が memcached をセッション ストアとして使用しているかどうかはわかりません。

開発環境で memcached をセッション ストアとして使用する際に見逃したものを誰か教えてもらえますか?

参考までに、devise を認証 gem として使用しています。

ありがとう

4

1 に答える 1

6

はい、コンソールに次のようなエラーが表示されます。

DalliError: No server available

ただし、Rails がセッション Cookie を生成してブラウザーに送信するため、セッション Cookie は引き続き取得されます。Rails には Cookie に関連付けられたデータを保存する場所がないだけです。

したがって、デモについては、これを試してください:

  1. memcached を停止します。一部のコントローラー アクションでは、次のようにします。

    def some_action
      puts session[:test]
      session[:test] = "hello"
    end  
    

    STDOUT に「hello」は表示されません。

  2. 次に、memcached を再起動して、もう一度アクションを実行します。(ブラウザを 2 回更新する必要がある場合があります)。今度は、「こんにちは」が表示されるはずです。

  3. memcached を再度停止すると、「hello」は表示されなくなります。

これで、Cookie (セッション キーを含む) の生成と、Cookie の値 (つまりセッション キー) に対するデータの保存が 2 つの異なるものであることが明確になることを願っています。もちろん、memcached が実際に停止していることを確認してください。

memcached を停止してもログインできる部分については、ドメイン (localhost) のすべての Cookie をクリアしたことと、変更後に Rails サーバーを再起動したことを確認してください。また、tmp/cache ディレクトリをクリアします。

PS。エラーが表示されない場合DalliError: No server availableは、memcached がまだどこかで実行されている可能性があります。Rails コンソールから Dalli 経由で memcached にアクセスしてみて、データを保存/取得できるかどうかを確認してください。

PPS。ファイルが tmp に格納されている場合 (tmp/cache/D83/760/_session_id%3A4d65e5827354d0e1e8153a4664b3caa1 など)、Rails がセッション データを格納するために FileStore にフォールバックしていることを意味します。

于 2013-12-14T07:29:07.530 に答える