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

Почему приложение rails на heroku обслуживает активы через all.css и локально через отдельные файлы

Я новичок в рельсах, я пытался выяснить, что происходит с stylesheets_link_tag на heroku.

Если я использую

= stylesheet_link_tag "style", :cache => true

heroku использует "all.css" и не получает таблицу стилей, но если я использую

= stylesheet_link_tag "style", :cache => false

он служит для таблицы стилей, используя свое имя "style.css". Почему?

4b9b3361

Ответ 1

Это результат вызова: cache = > true в теге ссылки таблицы стилей.

: cache = > true принимает все предоставленные таблицы стилей и объединяет их в один файл с именем all.css.

Причина, по которой вы видите это только при развертывании Heroku, заключается в том, что он вызывает конкатенированный all.css только тогда, когда приложение Rails работает в рабочем режиме.

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

= stylesheet_link_tag "application", "jquery-ui", "style", :cache => true

В процессе разработки это будет включать application.css, jquery-ui.css и style.css(в этом порядке).

В процессе создания он объединяет все CSS из трех файлов (в указанном порядке) в один файл под названием "all.css", который будет единственным файлом CSS.

Преимущество заключается в том, что в производстве меньше запросов HTTP и, в идеале, меньший размер файла для вашего включенного CSS, что, надеюсь, ускорит загрузку страницы.

Изменить Как указывает Каспер в комментариях, Heroku имеет файловую систему только для чтения. Вы можете посмотреть Heroku Asset Packager для решения, специфичного для Heroku.

Ответ 2

Протестировано это, и это не сработало для меня (добавление config.serve_static_assets = true к production.rb)

Ответ 3

Настройка: cache = > true приводит к сбою моих запросов.

Моим решением в краткосрочной перспективе является добавление следующего к моему config/environment/prodcution.rb

config.serve_static_assets = true

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