У меня есть приложение Rails 6, работающее в Google Kubernetes Engine, и я пытаюсь включить распределенное кэширование с помощью Memcached.
Я строго следовал этим инструкциям для развертывания Memcached в Kubernetes кластер с mcrouter. Ничего не пошло не так, и окончательный тест с использованием сценария Python работает нормально.
Тогда в моем приложении на Rails я думаю, что мне просто нужно добавить гем "dalli" и использовать MemCacheStore
следующим образом:
cache = ActiveSupport::Cache::MemCacheStore.new("#{ENV['NODE_NAME']}:5000")
cache.write('key', 'value')
Этот код должен подключаться к mcrouter на локальном узле через порт 5000 и выполнять запись в кэш (переменная окружения NODE_NAME
содержит имя локального узла).
Команда cache.write
возвращает false
и выводит ее в журнал:
D, [2020-01-08T18:02:30.233119 #215] DEBUG -- : Dalli::Server#connect gke-rev79-cluster-phat-pool-41a53de4-rfz3:5000
W, [2020-01-08T18:02:30.258514 #215] WARN -- : gke-rev79-cluster-phat-pool-41a53de4-rfz3:5000 failed (count: 0) EOFError: end of file reached
"gke-rev79-cluster-phat-pool-41a53de4-rfz3" - это имя локального узла
Вот что я получаю от cache.inspect
:
"#<ActiveSupport::Cache::MemCacheStore:0x0000000004087cb8 @options={}, @data=#<Dalli::Client:0x0000000004087498 @servers=[\"gke-rev79-cluster-phat-pool-41a53de4-rfz3:5000\"], @options={}, @ring=nil>>"
Как я могу подключиться к кешу? Возможно, мне нужно поместить некоторые вещи в опции кеш-хранилища Rails?