Пожалуйста, опубликуйте 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
Так что мы используем регулярное выражение в приведенном выше примере для сопоставления имени файла.