【问题标题】:when do I need to add an asset to config.assets.precompile and when not?我什么时候需要向 config.assets.precompile 添加资产,什么时候不需要?
【发布时间】:2012-02-01 15:05:33
【问题描述】:

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

(我的问题可能源于这个应用程序是从 rails 2.x 迁移的;很快我会从头开始重建它作为 3.x 应用程序,但不要'还没有时间。)

这是我的问题:我有一个 .css.js 文件,除非我将它们添加到 application.rb 中的 config.assets.precompile,否则 sprockets 找不到它们。我无法想象我必须为每个 .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

我认为这是因为 sprockets 正在寻找文件的指纹副本,该文件不存在除非我将其添加到 config.assets.precompile。然后一切都很好。

谁能解释一下?

【问题讨论】:

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


    【解决方案1】:

    预编译的规则很简单:

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

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

    【讨论】:

      【解决方案2】:

      正如你自己所说,facybox.css 的内容已经包含在你的application.css 中。

      这意味着您可以从您的部分以及您使用facybox.css 的任何其他地方删除stylesheet_link_tag。您必须对已包含在 application.css 中的所有其他样式表执行相同操作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-16
        • 1970-01-01
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 2018-02-25
        相关资源
        最近更新 更多