我有一个 iframe,它会渲染一个 partial,并不是主应用程序布局或资源管道的一部分。
我想要包含一些样式表,但是遇到了以下错误:
ActionView::Template::Error (960sm.css isn't precompiled):
Rails 3.1 Heroku
我有一个 iframe,它会渲染一个 partial,并不是主应用程序布局或资源管道的一部分。
我想要包含一些样式表,但是遇到了以下错误:
ActionView::Template::Error (960sm.css isn't precompiled):
Rails 3.1 Heroku
如果样式表没有在清单中被包含(直接按名称或通过require_tree间接),那么它们将不会被预编译,因此在生产环境中无法访问。
您需要将该样式表添加到环境应用程序.rb中的预编译项目列表中。
config.assets.precompile += ['960sm.css']
然后在视图中访问它:
stylesheet_link_tag('960sm')
不必管理一长串的CSS文件,你可以直接在文件名后面添加.scss扩展名来进行调整。
因此,960sm.css将变为960sm.css.scss。
这样做不会破坏任何东西,因为有效的CSS也是有效的SCSS。
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