链接器不向scss文件中添加的文件添加指纹

时间:2013-12-18 16:43:36

标签: ruby-on-rails sass sprockets

我遇到了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

非常感谢任何帮助。谢谢。

1 个答案:

答案 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

希望有所帮助!