【问题标题】:image_url vs image-url Rails 4.2 SCSimage_url vs image-url Rails 4.2 SCS
【发布时间】:2015-03-22 19:24:19
【问题描述】:

我正在将一个旧的 Rails 3.2 项目转换为 Rails 4.2,并注意到我的图像和字体资源没有正确加载。 Rails 服务器日志中没有错误,也没有显示在 Chrome 的开发控制台上,但是页面上没有显示图像和字体。

使用 RubyMine 并查看 scss 文件,我注意到 IDE 抱怨 image-pathfont-path 的使用。当我将连字符更改为下划线 (image_path font_path) 时,图像和字体显示在网页上。

最近是否有使连字符函数不再起作用的更改?连字符和下划线函数是否互为别名?

下划线函数名称出现在此处(sass_functions 内 sprockets 内):

require 'sass'

module Sprockets
  module SassFunctions
    def asset_path(path)
      ::Sass::Script::String.new(sprockets_context.asset_path(path.value), :string)
    end

    def asset_url(path)
      ::Sass::Script::String.new("url(" + sprockets_context.asset_path(path.value) + ")")
    end

    def image_path(path)
      ::Sass::Script::String.new(sprockets_context.image_path(path.value), :string)
    end

    def image_url(path)
      ::Sass::Script::String.new("url(" + sprockets_context.image_path(path.value) + ")")
    end

    def video_path(path)
      ::Sass::Script::String.new(sprockets_context.video_path(path.value), :string)
    end

    def video_url(path)
      ::Sass::Script::String.new("url(" + sprockets_context.video_path(path.value) + ")")
    end

    def audio_path(path)
      ::Sass::Script::String.new(sprockets_context.audio_path(path.value), :string)
    end

    def audio_url(path)
      ::Sass::Script::String.new("url(" + sprockets_context.audio_path(path.value) + ")")
    end

    def font_path(path)
      ::Sass::Script::String.new(sprockets_context.font_path(path.value), :string)
    end

    def font_url(path)
      ::Sass::Script::String.new("url(" + sprockets_context.font_path(path.value) + ")")
    end

    def javascript_path(path)
      ::Sass::Script::String.new(sprockets_context.javascript_path(path.value), :string)
    end

    def javascript_url(path)
      ::Sass::Script::String.new("url(" + sprockets_context.javascript_path(path.value) + ")")
    end

    def stylesheet_path(path)
      ::Sass::Script::String.new(sprockets_context.stylesheet_path(path.value), :string)
    end

    def stylesheet_url(path)
      ::Sass::Script::String.new("url(" + sprockets_context.stylesheet_path(path.value) + ")")
    end

    protected
      def sprockets_context
        options[:sprockets][:context]
      end

      def sprockets_environment
        options[:sprockets][:environment]
      end
  end
end
  • sass-3.4.10
  • rails-4.2.0
  • sass-rails-5.0.1
  • sprockets-2.12.3

【问题讨论】:

  • Sass 不提供 image-path 或 font-path 助手。可以在 Ruby 中编写不允许连字符和下划线互换的自定义 Sass 函数。
  • 我猜 OP 正在使用 sass-rails gem,它确实提供了带有连字符名称的 sass 函数。 OP,你说 IDE 抱怨,但你没有说代码是否真的有效。是吗?
  • @Jordan - 很好,它是 sass-rails gem。我将尝试在我的问题中澄清,但带连字符的函数名称不起作用。没有抛出错误,但没有显示图像和字体。一旦我更改为下划线方法,资产确实出现了

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


【解决方案1】:

看起来this issue on GitHub 是相关的。它描述了同样的问题,现在反映了一个解决方案in the sass-rails README

Sprockets 提供了一些位于 cmets 内部的指令,称为 requirerequire_treerequire_self不要在你的 SASS/SCSS 文件中使用它们。它们非常原始,不能很好地处理 Sass 文件。相反,请使用 Sass 的原生 @import 指令,sass-rails 已自定义该指令以与 Rails 项目的约定集成。

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2012-03-07
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多