【问题标题】:Sprockets not adding fingerprint to files added in scss fileSprockets 不向 scss 文件中添加的文件添加指纹
【发布时间】:2013-12-19 01:37:04
【问题描述】:

我遇到了 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 没有在 url 末尾生成指纹,因此在查看页面时不会加载。

奇怪的是,没有添加到 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

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: ruby-on-rails sass sprockets


    【解决方案1】:

    您不必定义asset_path,因为它是Rails 已经提供的帮助程序。在 scss 文件中使用 asset_path 时,您可能错过了 <%= %>

    background: $blue url(<%= asset-path('hero/hero-bg.jpg') %>) repeat-x;

    另外,不要忘记在您的 scss 文件中添加 .erb 文件扩展名,例如 example.css.scss.erb

    希望有帮助!

    【讨论】:

    • 虽然不是问题,但它帮助我解决了问题,即在我的样式中删除了注释掉/不需要的字体声明。此代码所在的文件没有以 .erb 结尾,这就是它抛出错误的原因。我删除了所有初始化程序等,效果很好。感谢您的帮助。
    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2010-12-31
    • 2012-10-31
    • 2020-04-28
    相关资源
    最近更新 更多