Rails资产管道 - image_path帮助程序仅在开发中工作

时间:2012-09-11 10:49:56

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

我在Rails(3.2.7)中遇到资产预编译问题。

我包括这样的图标:

<link rel="icon" type="image/png" href="<%= image_path("favicon.png") %>" />

在开发模式下,我设置了config.assets.compile = true。一切正常,渲染的HTML看起来像这样:

<link rel="icon" type="image/png" href="/assets/favicon.png" />

但是在制作时,我设置了config.assets.compile = false,我收到了错误

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Home#index
...
favicon.png isn't precompiled

我已经运行了rake assets:precompile,我可以清楚地看到资产在public/assets/favicon.png下可用。

我知道,我可以在生产中设置config.assets.compile = true,但我不想这样做(因为性能原因)。

有没有人知道,为什么我的rails应用程序无法解决生产中资产的正确路径?谢谢!


更新: 也许有用的知道:它不仅发生在图像上,也发生在其他资产上。

例如,当config.assets.compile设置为false时,<%= stylesheet_link_tag "screen", :media => "all" %>也会产生错误screen.css isn't precompiled

2 个答案:

答案 0 :(得分:1)

好的,经过几次尝试,我想出来了,如何解决这个问题。然而它有点奇怪,并不完全满足我。当我将digest设置为true并提供manifest的路径时,它只适用于我:

config.assets.compile = false
config.assets.digest = true
config.assets.manifest = Rails.root.join("public/assets")

知道这个“逻辑”背后的内容会很有趣。

答案 1 :(得分:0)

您必须告诉Rails哪些资产需要预编译。您可以使用config.assets.precompile config keyconfig/application.rbconfig/environments/production.rb中执行此操作。

Rails以预编译的默认资产列表开始,包括["application.js", "application.css"],但如果您希望自己的资产也进行预编译,则必须将它们添加到列表中。

例如:

# config/application.rb
module MyApp
  class Application < Rails::Application
    # other config ...

    config.assets.precompile += ["screen.css", "*.png"]
  end
end