Файл Rails остается в кеше на производстве - часть времени - PullRequest
0 голосов
/ 01 ноября 2018

У меня проблема, которая возникает только на моей производственной коробке. Прекрасно работает в средах DEV и TEST. Проблема в том, что обслуживаемая страница кэшируется - она ​​не отражает последние изменения, которые я сделал. Странная часть этого не происходит все время. Если я очищу кеш браузера, он может работать до тех пор, пока я не закрою браузер, а затем открою и перезагрузлю приложение - тогда снова произойдет сбой. Иногда я могу нормально загрузить страницу в IE, Chrome и Firefox. Но если я закрою Firefox и снова открою его, он может потерпеть неудачу со старой страницей. Не уверен, что это важно, но файл, который я пытаюсь изменить, является файлом haml. Вот что я пробовал до сих пор:

На самой производственной коробке:

 rm -rm tmp/cache/assets

 rake assets:clobber
 rake assets:precompile
 rake assets:clean
 rake tmp:cache:clear
 rails tmp:clear
 rails restart

После «перезапуска рельсов», кажется, работает некоторое время. Опять же, работает во всех браузерах, пока я не закрою Firefox несколько раз ... затем вернется к старому файлу. Также работал отлично для пары открытия / закрытия Chrome - затем вернулся к старому файлу. Я нашел еще одну проблему здесь, где кто-то установил no-cache. В application_controller.rb

 before_filter :set_cache_buster

 def set_cache_buster
     response.headers["Cache-Control"] = "no-cache, no-store"
     response.headers["Pragma"] = "no-cache"
     response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
 end

В конфиге / средах / production.rb:

 config.cache_classes = false
 config.cache_store = false
 config.action_controller.perform_caching = false

Если я пытаюсь запустить 'Rails.cache.clear' из консоли, я получаю:

 NoMethodError: undefined method 'clear' for false:FalseClass

Это очень странная проблема. Кто-нибудь думает о других вещах, которые я мог бы попробовать?

1 Ответ

0 голосов
/ 02 ноября 2018

Если ваша производственная среда находится в облаке, нет никакой гарантии о состоянии файловой системы или о том, сколько экземпляров будет работать, если вы специально не настроите ее таким образом. Один запрос может перейти к экземпляру A, а следующий запрос - к экземпляру B. Каждый экземпляр имеет свою собственную файловую систему и кэш.

Кроме того, экземпляры облаков регулярно перемещаются, и вы потеряете кеш.

Вместо кэширования в файловой системе вам необходимо использовать сервер кэширования, такой как memcached или Redis . Или заставьте свою производственную среду работать на одном сервере, но это не масштабируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...