Rails споделят кеша между уеб и worker на 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 за кеширане

Това е внедряването на кеш магазина по подразбиране.

Вашият работник и уеб процес не споделят една и съща файлова система, dynos се създават в напълно различни среди, които не споделят ресурси.

Ако искате да споделите кеша, ще трябва да го съхранявате централно на място, до което и двамата имат достъп.

Това вероятно означава хранилище за данни като Memcache или Redis.

Има много добавки Memcache и Redis, налични в Heroku.

person jordelver    schedule 30.06.2014