Рельсы 4 используют memcached как хранилище сеансов, используя dalli

Я не могу использовать memcached как хранилище сеансов с рельсами 4, используя dalli gem.

Вот что я сделал.

Я добавил dalli gem в Gemfile

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, я все равно могу войти в систему, как обычно. Должен ли я получить некоторую ошибку, например, не работает сервер memcached или что-то в этом роде.

Я не уверен, что рельсы используют memcached в качестве хранилища сеансов или нет.

Может ли кто-нибудь сказать мне, что я пропустил, используя memcached как хранилище сеансов в среде разработки?

Для вашей информации я использую устройство как подлинный камень.

Спасибо

Ответ 1

Да, вы должны увидеть такую ​​ошибку в консоли:

DalliError: No server available

Однако вы все равно получите куки файл сеанса, так как Rails будет генерировать его и отправлять в браузер. это просто, что Rails не имеет места для хранения данных, связанных с файлом cookie.

Итак, для демонстрации попробуйте следующее:

  • Остановить memcached. В некоторых действиях контроллера выполните следующее:

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

    Вы не должны видеть "привет" в STDOUT.

  • Теперь перезапустите memcached и снова нажмите действие. (возможно, потребуется дважды обновить браузер). На этот раз вы должны увидеть "привет" .

  • Если вы снова остановите memcached, "привет" больше не будет отображаться.

Надеюсь, это даёт понять, что генерация файла cookie (содержащего ключ сеанса) и хранение данных против значения файла cookie (то есть ключа сеанса) - это две разные вещи. И, конечно же, убедитесь, что memcached действительно остановлен.

Что касается того, что часть может войти в систему даже с остановленным memcached, убедитесь, что вы удалили все файлы cookie для домена (localhost) и перезапустили сервер рельсов после внесения изменений. Кроме того, удалите каталог tmp/cache.

PS. Если вы не видите ошибку DalliError: No server available, значит, memcached, вероятно, все еще работает где-то. Попробуйте получить доступ к memcached через Dalli через консоль Rails и посмотреть, можете ли вы хранить/получать данные.

ПФС. Если вы видите файлы, хранящиеся в tmp (например, tmp/cache/D83/760/_session_id% 3A4d65e5827354d0e1e8153a4664b3caa1), это означает, что Rails возвращается в FileStore для хранения данных сеанса.