Javascript кэшируется в режиме разработки с конвейером активов - PullRequest
15 голосов
/ 01 октября 2011

Я недавно обновил свое приложение до rails 3.1, и в целом все, кажется, работает, но одна вещь сводит меня с ума.

У меня есть 2 основных файла js, мы назовем их application.js и main.js.

application.js содержит мой манифест и загружается в main.js.Это работает нормально.Моя проблема в том, что когда я нахожусь в режиме разработки, и я изменяю файл main.js, затем обновляю страницу, которую сайт не воспринимает.Чтобы внести изменения, я перезапустил сервер rails.

У меня включен режим отладки в разработке, но мне интересно, есть ли другие настройки, которые я пропускаю?

Кто-нибудь сталкивался с этим раньше?

Ответы [ 8 ]

15 голосов
/ 30 апреля 2012

У меня была такая же проблема, но config.action_controller.perform_caching уже был установлен в ложь.

Для меня и другого парня, с которым я работал, проблема была в том, что Chrome кэшировал страницу, несмотря на настройки в Rails.

Чтобы исправить это, мы просто закрыли вкладку, открыли новуюи снова посетил сайт.

4 голосов
/ 26 октября 2013

У меня была та же проблема, и я обнаружил, что удаление дайджестов ресурсов в процессе разработки устранило проблему.Убедитесь, что вы установили значение false в Developmen.rb:

config.assets.digest = false
2 голосов
/ 01 марта 2013

Также обратите внимание, что если вы включите config.threadsafe, он включит cache_classes. Поэтому, если ваш файл config / environment / development.rb содержит следующее:

config.cache_classes = false
config.threadsafe!

Затем вы выключаете cache_classes и затем снова включаете его. Вам нужно будет либо закомментировать config.threadsafe (если вам это не нужно), например:

config.cache_classes = false
# config.threadsafe!

Или, если вам нужен потокобезопасный, измените порядок этих двух конфигураций в обратном порядке, чтобы config_classes действительно был отключен:

config.threadsafe!
config.cache_classes = false

Для получения дополнительной информации см. http://tenderlovemaking.com/2012/06/18/removing-config-threadsafe.html

2 голосов
/ 30 апреля 2012

Открытие Chrome в режиме инкогнито работало лучше всего для меня.Нет необходимости открывать и закрывать вкладку.В режиме инкогнито chrome не кэширует JavaScript.

2 голосов
/ 12 октября 2011

У меня была такая же проблема, и я наконец-то наткнулся на что-то в моем development.rb. У меня config.action_controller.perform_caching установлено значение true, и изменение его на false решило проблему.

1 голос
/ 04 ноября 2012

У меня была та же проблема, config.action_controller.perform_caching установлен правильно. Я также использую Heroku и прекомпилирую ресурсы для Push to Heroku, используя: RAILS_ENV = производственный пакет exec rake активы: прекомпиляция После запуска, когда я начал новую работу, я забыл удалить предварительно скомпилированные ресурсы, используя: sudo rm -r public / assets / *

Итак, что бы я ни делал с моими файлами .js, их изменения не обнаруживались.

1 голос
/ 01 октября 2011

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

Это должно выглядеть примерно так для обычного запроса (вы перешли на страницу):

Started GET "/assets/application.js" for 127.0.0.1 at Fri Sep 30 12:13:27 +1300 2011
Served asset /application.css - 304 Not Modified (2ms)

Если нет, возможно, вы неправильно установили параметры конвейера.Одна из производственных настроек может быть не в том месте. Раздел 9 руководства по конвейеру активов содержит контрольный список правильных настроек для перенесенного приложения.

0 голосов
/ 26 июня 2015

Если вышеупомянутые ответы потерпят неудачу в вашем контексте ..

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

использование rails c >> Rails.cache.clear
или просто удалите кеши в tmp dir

[project_dir/tmp/cache/assets"]

...