Rails разделяет кеш между сетью и рабочим на Heroku

У меня есть приложение Rails, в котором есть как веб-процесс, так и фоновый рабочий (работает Sidekiq).

У меня есть одна функция, которая записывает значение в кеш из веб-процесса, а затем рабочий считывает это значение из кеша позже.

В сети:

Rails.cache.write 'key', 'xxx'

В рабочем:

Rails.cache.read 'key'

Это работает в моей локальной среде, но когда я развертываю этот код в Heroku, рабочий процесс НЕ может прочитать соответствующий ключ из кеша, он всегда возвращает ноль.

Мне интересно, есть ли какая-то специальная конфигурация, которую я проигнорировал для производственного режима?


person fuyi    schedule 11.06.2014    source источник
comment
Вы используете стороннее дополнение для своего сервиса Redis? Вы подтвердили, что подключаетесь к тому же/правильному экземпляру Redis? Надстройки должны предоставлять что-то вроде REDIS_URL, к которому должны подключаться как ваши веб-инстансы, так и рабочие экземпляры.   -  person catsby    schedule 11.06.2014


Ответы (1)


Хранилище кеша по умолчанию в Rails — filestore, что означает, что кеш хранится на диске.

Из руководства Rails по кэшированию.

Это реализация хранилища кеша по умолчанию.

Ваш рабочий процесс и веб-процесс не используют одну и ту же файловую систему, динамические процессы создаются в совершенно разных средах, которые не используют общие ресурсы.

Если вы хотите поделиться кешем, вам нужно будет хранить его централизованно в месте, к которому они оба могут получить доступ.

Это означает, что, вероятно, имеется в виду хранилище данных, такое как Memcache или Redis.

На Heroku доступно множество аддонов Memcache и Redis.

person jordelver    schedule 30.06.2014