2011-09-28 75 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。)

相关问题