Javascript кэшируется в режиме разработки с конвейером ресурсов

#ruby-on-rails-3.1 #asset-pipeline

#ruby-on-rails-3.1 #конвейер активов

Вопрос:

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

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

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

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

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

Комментарии:

1. У меня такая же проблема, надеюсь найти решение здесь. Кажется, я не могу найти какой-либо способ предотвратить отправку кэшированного файла JS (или CSS, если на то пошло). Sux в те трудные дни, когда все, что вы можете сделать, это изменить одну крошечную вещь за раз, вам нужно продолжать перезапускать веб-кирпич снова и снова…

Ответ №1:

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

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

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

Комментарии:

1. В итоге это было так — на самом деле это chrome. Я до сих пор понятия не имею, почему, но мне пришлось вручную очистить кеш браузера, а затем он принял изменения.

2. Это только что случилось со мной, перезапуск браузера, казалось, решил эту проблему … как будто он просто внезапно решил использовать кэширование, несмотря на то, что для perform_caching установлено значение false. Странно.

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

4. В других решениях говорилось, что выполняется «rake assets: clean», но на самом деле проблема заключается в том, что chrome кэширует js. Перезапуск браузера работает, но он возвращается к кэшированию.

5. Да, я думаю, что это тоже была моя проблема. Я решил это, запустив сервер в порту 3001, и все заработало : rails s -p 3011 . Однако с табуляцией все проще.

Ответ №2:

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

 config.assets.digest = false
  

Ответ №3:

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

Ответ №4:

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

Ответ №5:

Также обратите внимание, что если вы включите config.threadsafe , он включит cache_classes . Итак, если ваш файл config/ environments/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

Ответ №6:

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

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

Начал ПОЛУЧАТЬ "/assets/application.js " для 127.0.0.1 в пятницу 30 сентября 12:13:27  1300 2011
Обслуживаемый ресурс / application.css - 304 не изменен (2 мс)

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

Комментарии:

1. да, я начинаю ПОЛУЧАТЬ «/assets/main.js?body=1» для 127.0.0.1 в 2011-10-01 16:22:16 -0400 обслуживаемых ресурсов /main.js — 304 Не модифицировано (0 мс)

2. в комментариях нет разрывов строк. похоже, что он подается из кэша, я снова просмотрю руководство

3. Какие заголовки вы видите в браузере?

Ответ №7:

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

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

Ответ №8:

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

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

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

[project_dir/tmp/cache/assets"]