ActionView :: Template :: Error(960.css未预编译)

时间:2011-09-28 00:57:10

标签: ruby-on-rails heroku actionview asset-pipeline

我有一个iframe,它呈现部分并且不是主应用程序布局或资产管道的一部分。

我想要包含一些样式表,但是我收到了这个错误:

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

Rails 3.1 Heroku的

3 个答案:

答案 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

(基于code in the Rails Guide。)