Запретить кэширование одного файла JS - PullRequest
3 голосов
/ 19 декабря 2011

У меня есть файл .js.erb в моем каталоге ресурсов. Это читает некоторый специфичный для локали конфиг.

Однако, когда базовая конфигурация изменяется, новый файл не передается моему браузеру. Я получаю 304 без изменений.

Если я изменю файл .js.erb, добавив пробел, новый файл будет обработан правильно. Делать это каждый раз, когда я добавляю конфиг, было бы больно.

Есть ли способ настроить рельсы, чтобы не кэшировать этот конкретный файл?

Спасибо за любые предложения.

Редактировать: Выполнено немного больше чтения на конвейере активов

"Активы компилируются и кэшируются по первому запросу после запуска сервера. Sprockets устанавливает обязательный повторный валидатор HTTP-заголовка Cache-Control, чтобы уменьшить накладные расходы на последующие запросы - на них браузер получает ответ 304 (не изменен) .

Если какой-либо из файлов в манифесте изменялся между запросами, сервер отвечает новым скомпилированным файлом. "

Итак, проблема в том, что первый запрос кэшируется - это динамический файл javascript. Возможно, единственный способ предотвратить кэширование этого кода для встроенного JavaScript-кода ??

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

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

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

Если у вас есть шаблон js.erb в app / views / controller_name, то rails должен просто отрендерить его.

Например, если у вас был контроллер с именем JsController, вы можете добавить

match '/javascripts/settings.js', :controller => :js, :action => :settings, :format => :js, :as => :setting_js

в ваш файл rout.rb, а затем вставьте файл settings.js.erb в app / views / js

Затем вы можете связать его с

= javascript_include_tag settings_js_path
2 голосов
/ 20 декабря 2011

Вы пробовали что-то подобное в методе контроллера, который обслуживает этот файл?

response.headers["Last-Modified"] = Time.now.httpdate
response.headers["Expires"] = 0
response.headers["Pragma"] = "no-cache"
response.headers["Cache-Control"] = 'no-store, no-cache, must-revalidate, max-age=0, pre-check=0, post-check=0'
...