我何时需要将资产添加到config.assets.precompile,何时不需要?

时间:2012-02-01 15:05:33

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline sprockets

当我需要将资产添加到config.assets.precompile以及何时不需要时,我有点困惑。

(我的问题可能源于这个应用程序是从rails 2.x迁移出来的事实;在某个时刻我很快就会从3.x应用程序开始重建它,但不要'我还有时间。)

以下是我的问题:我有一个.css.js个文件,链接器找不到这些文件,除非我将它们添加到config.assets.precompile中的application.rb。我无法想象我必须为每个.js.css执行此操作,是吗?

例如,我遇到此问题的一个文件是app/assets/stylesheets/facybox.css

application.css是:

/*
 *= require_self
 *= require_directory .
*/

(是的,require_directory而不是require_tree故意。)

我在部署期间在我的服务器上运行rake assets:precompile。结果application.css的内容为facybox.css

部分引用了

facybox.css,如下所示:

<% content_for :header do %>
  <%= stylesheet_link_tag "facybox" %>
<% end %>

但是当我转到包含部分内容的页面时,我得到:

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Admin#compositions
Showing /srv/zmx/releases/5420c4dde6fbec53d78cffe78396085f263ed039/app/views/shared/_preview_assets.erb where line #6 raised:
facybox.css isn't precompiled

我假设是因为链轮正在寻找文件的指纹副本,该副本不存在,除非我将其添加到config.assets.precompile。然后一切都是笨拙的。

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

预编译的规则很简单:

如果其中一个应用程序清单中需要资产,则无需将其添加到预编译中。

如果需要在Rails视图中直接引用资产,那么您需要添加它(并且应该从任何清单中删除它。)

答案 1 :(得分:1)

正如您自己所说,facybox.css已包含application.css的内容。

这意味着您只需从部分以及使用stylesheet_link_tag的任何其他位置移除facybox.css即可。您必须对已包含在application.css

中的所有其他样式表执行相同的操作