Есть ли способ визуализации application.scss в строку css? - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь вставить некоторые CSS для шаблона (для html в img, а не для электронной почты) с самоцветом Roadie, для которого требуется строка css.Я хочу преобразовать файл application.scss в строку, но не могу найти надежный способ сделать это.На данный момент я просто копирую это из браузера, но я хотел бы сделать это программно.

То, что я пробовал:

str = File.read("app/assets/stylesheets/application.scss")
se = Sass::Engine.new(str, :syntax => :scss)
se.render 

Это вызывает у меня проблемы с sass, загруженным драгоценными камнями, такими как звездочки Bootstrap:

Sass::SyntaxError: File to import not found or unreadable: bootstrap-variables

Каков наилучший способсделать это?

1 Ответ

0 голосов
/ 07 октября 2018

Пожалуйста, опубликуйте application.scss, но похоже, что этот файл, вероятно, пытается загрузить что-то вроде @import bootstrap-variables Sass::Engine, и он не узнает, находятся ли файлы bootstrap-variables.scss в том же каталоге, что и application.scss, хотя railsможет, если вы используете, например, самоцвет rails bootstrap-sass.

Убедитесь, что ваши @import файлы имеют действительный sass и имеют правильные имена и находятся в том же каталоге, что и application.scss То же самое для других файлов, которые могут быть импортированы в application.scss.

Тогда вы сможете сделать следующее:

css = Sass::Engine.for_file('application.scss', {}).render

Если вы пытаетесь сделать это внутри рельсов, то, скорее всего, вы загрузили загрузчик через гем, и рельсы будут обрабатывать прекомпиляцию ресурсов и знать, кудаискать импорт.Вместо того, чтобы пытаться выяснить, где все живет для вашей цели, может быть проще запустить bundle exec rake assets:precompile, тогда вы можете сделать что-то вроде этого:

filename = Dir.entries('public/assets/').find{|f| f.match(/application-\w+.css$/)}
css = Sass::Engine.for_file(filename, {}).render
#css is the flat css compiled from the rails precompile

Но так как вы уже скомпилировали, вы можетепросто сделайте

css = 
File.read(
  Dir.entries('public/assets/').find do |filename|
    filename.match(/application-\w+.css$/)
  end
)

Волшебство bundle exec rake assets:precompile сгенерирует плоский CSS-файл с именем наподобие application-a30bb6a9753337386468559f6f44286d58d74f88ddc710b5d5832a67b576d16a.css

Так что мы используем регулярное выражение в приведенном выше примере для сопоставления имени файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...