2011-09-28 104 views
22

我有一個呈現部分的iframe,而不是主應用程序佈局或資產管道的一部分。ActionView :: Template :: Error(960.css未預編譯)

我想包括一些樣式表,但是我得到這個錯誤:直接通過名稱或

ActionView::Template::Error (960sm.css isn't precompiled): 

的Rails 3.1 的Heroku未包括在清單

回答

41

樣式表(間接地通過require_tree)沒有預編譯,所以不能在生產中訪問。

您需要將表添加到要在環境application.rb中預編譯的項目列表中。

 
config.assets.precompile += ['960sm.css'] 

,然後訪問它的觀點:

 
stylesheet_link_tag('960sm') 
+0

感謝您幫助我理清資產管道。 – hagope

+3

工作正常,幫了我很大忙,但是關於application.css的描述給出了關於它是如何工作的另一個想法:.../* *這是一個清單文件,將自動包含此目錄中可用的所有樣式表。 *和任何子目錄。您可以自由地爲該文件添加應用程序範圍的樣式,並且它們將出現在編譯文件的頂部 *,但通常最好爲每個樣式範圍創建一個新文件。 * = require_self * = require_tree。 */ –

+0

這幫了我...幾個小時後找到解決方案 – justcode

4

而是管理的CSS文件的列表,你可能更願意簡單地通過增加.scss到文件名調節延伸。

因此,960sm.css將成爲960sm.css.scss

這不應該破壞任何有效的CSS是有效的SCSS。

+1

這很好,但請記住*不*要在預編譯列表中添加.scss。 「總是指定一個[以.js或.css結尾的預期編譯文件名](http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets),即使您想將Sass或CoffeeScript文件添加到預編譯陣「。 – AlexChaffee

0

如果你有很多獨立的資產,然後而不是增加每一個到列表中,這樣

config.assets.precompile += ['960sm.css'] 

你可能只想預編譯一切,像這樣:

def precompile?(path) 
    %w(app lib vendor).each do |asset_root| 
    assets_path = Rails.root.join(asset_root, 'assets').to_path 
    return true if path.starts_with?(assets_path) 
    end 
    false 
end 

# Precompile all assets under app/assets (unless they start with _) 
Rails.application.config.assets.precompile << proc do |name, path| 
    starts_with_underscore = name.split('/').last.starts_with?('_') 
    unless starts_with_underscore 
    path = Rails.application.assets.resolve(name).to_path unless path # Rails 4 passes path; Rails 3 doesn't 
    precompile?(path) 
    end 
end 

(基於code in the Rails Guide。)

相關問題