我有一个iframe,它呈现部分并且不是主应用程序布局或资产管道的一部分。
我想要包含一些样式表,但是我收到了这个错误:
ActionView::Template::Error (960sm.css isn't precompiled):
Rails 3.1 Heroku的
答案 0 :(得分:41)
未包含在清单中的样式表(直接通过名称或间接通过require_tree)未预编译,因此无法在生产中访问。
您需要将工作表添加到要在环境application.rb中预编译的项目列表。
config.assets.precompile += ['960sm.css']
然后在视图中访问它:
stylesheet_link_tag('960sm')
答案 1 :(得分:4)
您可能更愿意通过将.scss添加到文件名来调整扩展名,而不是管理CSS文件列表。
因此, 960sm.css 将成为 960sm.css.scss 。
这不应该破坏任何东西,因为有效的CSS是有效的SCSS。
答案 2 :(得分: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