1

我有一个应用程序,它具有三个不同的 CSS 主题,每个主题都有十几种配色方案。在开发中一切正常,但资产管道给了我一些奇怪的问题。

基本上我有几个这样的文件

/themes
  /cool-theme
    _theme.scss
    /color-schemes
      red.scss

这个想法是我预编译所有 *.scss 文件,除了部分文件(以下划线开头),因为它们包含在 SASS 中。所以我正在使用这段代码:

stylesheets_directory = "#{Rails.root}/app/assets/stylesheets"
config.assets.precompile += Dir.glob("#{stylesheets_directory}/**/*.scss").
                            map{|f| f[stylesheets_directory.size+1..-1]}.
                            select do |file|
                            if config.assets.precompile.include?(file)
                              puts "Already have #{file}"
                              false
                            elsif File.basename(file)[0...1] == "_"
                              puts "Partial detected #{file}"
                              false
                            else
                              puts "Including #{file}"
                              true
                            end
                          end

代码运行良好,并在 assets:precompile 期间显示了我期望的输出。排除应有的一切,并包括应有的一切。

问题是 /public/assets 目录从不包含除 application.css 之外的任何 css 文件。它缺少 red.css、blue.css 等...

我在看什么?

4

1 回答 1

2

管道适用于 Javascript 文件和样式表的方式是默认情况下它只会为您预编译一个application.js和文件。application.css这就是您尝试将更多资产附加到config.assets.precompile数组的原因。你在正确的轨道上,但犯了一些错误。

文件扩展名

你需要重命名

app/assets/stylesheets/themes/cool-theme/color-schemes/red.scss

app/assets/stylesheets/themes/cool-theme/color-schemes/red.css.scss

这告诉管道您希望.css它在完成编译后成为一个文件。

资产路径

目前,您正在附加一条路径,例如

/Path/To/Your/app/assets/stylesheets/themes/cool-theme/color-schemes/red.scss

config.assets.precompile阵列。相反,您需要以这种格式传递路径

themes/cool-theme/color-schemes/red.css

当您预编译资产时,您会看到themes在其中创建了一个新文件夹,public/assets/其中包含目录树的其余部分,并带有一个已编译的red.css文件。


我将保留您的代码以将路径附加config.assets.precompile到您,因为您似乎完全有能力进行上述必要的更改。

于 2013-01-31T19:26:00.513 回答