当我需要将资产添加到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
。然后一切都是笨拙的。
有人可以解释一下吗?
答案 0 :(得分:2)
预编译的规则很简单:
如果其中一个应用程序清单中需要资产,则无需将其添加到预编译中。
如果需要在Rails视图中直接引用资产,那么您需要添加它(并且应该从任何清单中删除它。)
答案 1 :(得分:1)
正如您自己所说,facybox.css
已包含application.css
的内容。
这意味着您只需从部分以及使用stylesheet_link_tag
的任何其他位置移除facybox.css
即可。您必须对已包含在application.css