#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"]