Подтвердить что ты не робот

Очистить кеш от конвейера Rails

Я запускаю новый проект в Rails, и похоже, что файл манифеста application.js делает что-то смешное с javascripts, которое я ссылаюсь, - он кэширует эти файлы как часть конвейера активов?

Вот что случилось. Я добавил файл javascript с именем jquery.autoresize.js в папку vendor/assets/javascripts, а затем ссылался на файл в манифесте application.js следующим образом:

//= require jquery.autoresize.js 

Затем я запустил сервер rails. Но после навигации в моем приложении я понял, что случайно добавил неверную версию файла jquery.autoresize.js. Итак, я удалил этот файл, а затем добавил правильную версию в папку vendor/assets/javascripts. Но, к моему ужасу, когда я перезагрузил страницу, она по-прежнему загружает старый файл javascript.

Я попытался очистить кеш браузера, а затем выйти и перезапустить сервер Rails, но безрезультатно. Я взломал решение вместе, просто переименовав свой файл javascript и ссылаясь на новое имя, которое отлично работало. Но это должно быть лучшим решением.

Связано ли новое конвейер ресурсов с файлами, которые вы ссылаетесь? Если да, то как я могу очистить этот кеш? Спасибо за любую помощь!

4b9b3361

Ответ 1

Я предполагаю, что мы говорим о производственной среде.

При изменении любого из ваших javascripts или таблиц стилей в рабочей среде вам нужно запустить rake assets:precompile; эта задача компилирует и сжимает различные .js и .css файлы и создает файлы application.js и application.css, которые загружаются вашими представлениями.

Возможно, если вы заменили jquery.autoresize.js на версию с более старой меткой времени, шаг прекомпиляции может пропустить ее, считая скомпилированную версию актуальной. Вы можете избежать этого, запустив rake assets:clean, сначала, заставив его перестроить все в директории public/assets с нуля.

Ответ 2

Также попробуйте rake assets:clobber. Это будет полностью reset все и удалит все скомпилированные активы. Кроме того, мне часто приходится устанавливать среду перед тем, как перейти к производству, перейдя: RAILS_ENV=production rake assets:precompile.

Ответ 3

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

Причина, по которой jquery.autoresize.js использовала старую кешированную версию файла, состояла в том, что старая версия была удалена, а затем новая версия была скопирована и вставлена ​​с тем же именем в одну и ту же папку. Поскольку сам файл никогда не редактировался, Rails продолжал использовать старый файл, который был кэширован.

Это связано с тем, что конвейер ресурсов использует отпечатки пальцев для кеша.

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

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

Техника, используемая Rails для снятия отпечатков пальцев, заключается в том, чтобы вставить хэш содержимого в названии, обычно в конце. Например, CSS файл global.css можно переименовать с помощью дайджеста MD5 его содержимого:

global-908e25f4bf641868d8683022a5b62f54.css

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

Подробную информацию см. в Что такое отпечаток пальца и почему я должен заботиться?.

Ответ 4

Я использую config.assets.version = '1.01019' в моем application.rb, чтобы перегрузить весь кеш. Когда я хочу нажать полную версию, я увеличиваю версию, и это делает трюк. Это касается тех крайних случаев, когда Rails не перекомпилирует в качестве актива по любой причине.

Ответ 5

rake tmp:clear помогло, я использую менее рельсы.