我遇到了Rails,Sprockets,SCSS的问题,而且没有为生成的图像文件添加指纹。
当我尝试在开发以外的环境中预编译资产时,出现以下错误:
rake aborted!
Custom asset_path helper is not implemented
Extend your environment context with a custom method.
environment.context_class.class_eval do
def asset_path(path, options = {})
end
end
所以我将以下内容添加到初始化程序中:
Rails.application.assets.context_class.class_eval do
def asset_path(path, options = {})
end
end
这导致错误消失,但我不知道这是否是解决问题的正确方法。然后它会产生一个新错误:
undefined method `include?' for nil:NilClass
但是,如果我添加以下代码:
Rails.application.assets.context_class.class_eval do
def asset_path(path, options = {})
"/assets/#{path}"
end
end
预编译正常,但生成的css没有在网址末尾生成指纹,因此在查看页面时不会加载。
奇怪的是,未添加到scss文件中的图像(如html中的img标记)会将指纹附加到精确状态,并在查看页面时显示。
以下是一些未加载指纹的scss示例:
background: $blue url( asset-path('hero/hero-bg.jpg') ) repeat-x;
我正在运行Rails 4.0.2。这是我的gemfile:https://gist.github.com/anthonycollini/8025540
非常感谢任何帮助。谢谢。
答案 0 :(得分:0)
您不必定义asset_path
,因为这是Rails已经提供的帮助程序。在您的scss文件中使用<%= %>
时,您可能错过了asset_path
。
background: $blue url(<%= asset-path('hero/hero-bg.jpg') %>) repeat-x;
此外,请不要忘记在您的scss文件中添加.erb
文件扩展名,例如example.css.scss.erb
。
希望有所帮助!