Рельсы: используйте функцию перераспределения ресурсов с помощью Asset Pipeline

Быстрый вопрос для профессионалов rails там...

При работе с приложениями Rails 3.0.x я был тяжелым пользователем Guard и LiveReload. Однако, похоже, что при использовании конвейера активов в Rails 3.1 защитник педалей не знает, что изменения в файле Sass должны инициировать отправку нового css в браузер.

Кто-нибудь использует LiveReload с Asset Pipeline? Если да, как вы это делаете?

Спасибо!

Ответы

Ответ 1

После выполнения некоторых проблем в Github я нашел следующую исправленную проблему:

1) Убедитесь, что все scss файлы названы в соответствии с новым соглашением о ресурсах, например: filename.css.scss

Я использовал scss перед Rails 3.1 и только что назвал все мои sass файлы filename.scss.

2) Для сохранения в вашем файле защиты используйте следующую команду:

guard 'livereload' do
  watch(%r{app/helpers/.+\.rb})
  watch(%r{app/views/.+\.(erb|haml)})
  watch(%r{(public/).+\.(css|js|html)})
  watch(%r{app/assets/stylesheets/(.+\.css).*$})    { |m| "assets/#{m[1]}" }
  watch(%r{app/assets/javascripts/(.+\.js).*$}) { |m| "assets/#{m[1]}" }
  watch(%r{lib/assets/stylesheets/(.+\.css).*$})    { |m| "assets/#{m[1]}" }
  watch(%r{lib/assets/javascripts/(.+\.js).*$}) { |m| "assets/#{m[1]}" }
  watch(%r{vendor/assets/stylesheets/(.+\.css).*$}) { |m| "assets/#{m[1]}" }
  watch(%r{vendor/assets/javascripts/(.+\.js).*$})  { |m| "assets/#{m[1]}" }
  watch(%r{config/locales/.+\.yml})
end

Ответ 2

Я тоже нашел неплохую работу:

guard :livereload do
  watch(%r{^app/.+\.(erb|haml|js|css|scss|sass|coffee|eco|png|gif|jpg)})
  watch(%r{^app/helpers/.+\.rb})
  watch(%r{^public/.+\.html})
  watch(%r{^config/locales/.+\.yml})
end

Это не код по умолчанию, который генерируется при запуске guard init livereload по какой-то причине, которая не так хорошо работает с sass import.

Ответ 3

Как заметил в своем комментарии @mirko, дополнительные .css на scss файлах устарели. Поэтому добавление этого не является отличным решением, и я испытал, что просто добавление расширения scss приводит к перезагрузке страницы.

Итак, я обнаружил, что это работает:

watch(%r{(app|vendor)(/assets/\w+/(.+)\.(scss))}) { |m| "/assets/#{m[3]}.css" }`

Мое понимание заключается в том, что он отображает файл scss в скомпилированный файл css. Надеюсь, это сработает и для сасса.

Источник: проблема Github