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

Что такое настройка "config.assets.debug"?

Я начал разработку простого рельсового приложения. После нескольких часов работы я замечаю, что каким-то образом удаленный css по-прежнему применяется к веб-страницам.

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

  • остановить/запустить сервер
  • использовать сервер rails
  • использовать сервер с крутящим моментом
  • удалить кеш браузера

но ничего не меняется. Это было очень странно - были применены новые определения css, но те, которые я удалил, все еще были там. Итак, я сдался и решил создать новый проект.

Я установил новый проект (его эшафот совпадает с первым), и когда я открываю одно из представлений, также применялись стили из старого проекта. Я решил снова взглянуть на http://guides.rubyonrails.org/asset_pipeline.html и узнать, что настройка

#Expands the lines which load the assets
config.assets.debug = false

решает проблему. Но что этот вариант делает точно? Почему старые проекты css были применены, когда это было правдой?

4b9b3361

Ответ 1

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

В основном:

config.assets.debug = true: активы обслуживаются индивидуально, организованы так, как вы видите их в процессе разработки. Предварительно обработанные языки, такие как SASS или CoffeeScript, по-прежнему будут отображаться в качестве целевых языков (т.е. CSS и JS соответственно).

config.assets.debug = false: ресурсы объединены в файлы, такие как application.css и application.js. Трассировки стека ошибок, скорее всего, больше не будут иметь правильный номер строки, и их сложнее отобразить в исходном коде.

Ответ 2

Если вы попадаете на эту веб-страницу, есть вероятность, что вы здесь, потому что вы используете Rails Asset Pipeline, вы внесли изменения в один из файлов javascript и перезагрузили страницу, и это изменение не отражается при поиске на вкладке Sources в Chrome.

Как указано выше, config.assets.debug = false предлагает гем Sprockets объединить все отдельные файлы javascript и css в один файл application.js и application.css соответственно. Кроме того, Sprockets запускает препроцессоры SASS и CoffeeScript (если вы не использовали --skip-coffee) для всех связанных файлов для создания файлов CSS и JavaScript, которые может понять браузер.

Одно важное замечание заключается в следующем. Ruby Guides говорит это об отладке = false:

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

Это означает, что если вы не меняете файлы css или javascript между запросами, то будет использоваться кеш. Как только вы меняете файл, кеш становится недействительным, и для последующих запросов создается новый кеш.

Следовательно, если вы внесли изменения в файл javascript, и это изменение не отражается при перезагрузке страницы, это не имеет ничего общего с этой опцией config.assets.debug.

Есть эта другая опция под названием config.action_controller.perform_caching.

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

Кэширование фрагментов позволяет оборачивать фрагмент логики представления в блок кеша и подавать его из хранилища кеша при поступлении следующего запроса. Но, опять же, у фрагментов кеша также истекает время, когда изменяется фрагмент представления (например, HTML в вид меняется).

Таким образом, остается вопрос, почему изменение вашего javascript не отражается? Ответ - Google Chrome, сам браузер, кэширует страницу, несмотря на ваши настройки Rails. Чтобы удалить кэш, закройте текущую вкладку, откройте новую вкладку и снова посетите сайт.