我在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
。
答案 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 key在config/application.rb
或config/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