【问题标题】:compass-rails got can't convert nil into String using sprite-dimensions mixincompass-rails got 无法使用 sprite-dimensions mixin 将 nil 转换为 String
【发布时间】:2015-04-17 13:07:28
【问题描述】:

在我的 rails 3.2 应用程序中,使用 compass 0.12.7rails-compass 2.0.0 生成精灵。图标目录为[root]/public/img/marketings/icons[root]/public/img/marketings/icons-retina

由于图像目录不是 compass 的默认图像目录,因此在 config/initializers 中添加了 compass_config.rb

options = {
  :sprite_load_path => Compass.configuration.sprite_load_path + ["#{Rails.root}/public/img"],
  :images_dir => "public/img",
  :images_path => "#{Rails.root}/public/img",
  :generated_images_dir => "public/img",
  :generated_images_path => "#{Rails.root}/public/img"
}
Compass.add_configuration(options, "sprites")

编写了一个自定义的 sass 文件:

$sprites: sprite-map("marketings/icons/*.png");
$sprites-url: sprite-url($sprites);
$sprites2x: sprite-map("marketings/icons-retina/*.png");
$sprites2x-url: sprite-url($sprites2x);

// some more codes....

@mixin retina-sprite($name, $sprites, $sprites-url, $sprites2x, $sprites2x-url, $dimensions: true, $pad: 0) {
  @if $dimensions == true {
    @include sprite-dimensions($sprites, $name);
  }

  background-image: $sprites-url;
  background-position: sprite-position($sprites, $name, -$pad, -$pad);
  background-repeat: no-repeat;

  @if $pad > 0 {
    padding: $pad;
  }

  @include hidpi(1.5) {
    $pos: sprite-position($sprites2x, $name, -$pad*2, -$pad*2);
    background-image: $sprites2x-url;
    background-position: nth($pos, 1) nth($pos, 2)/2;
    @include background-size(ceil(image-width(sprite-path($sprites2x)) / 2), auto);
  }
}

精灵图像生成正确,但在 @include sprite-dimensions($sprites, $name)@include background-size(ceil(image-width(sprite-path($sprites2x)) / 2), auto) 的行中出现“无法将 nil 转换为字符串”错误

如果将图标目录移动到 app/assets/images 并删除 compass_config.rb,它可以正常工作。但是由于某些历史原因,图标必须位于 public/img 目录中。我的 compass_config.rb 有什么问题吗?

【问题讨论】:

    标签: ruby-on-rails-3 sprite compass-sass


    【解决方案1】:

    查看 compass 和 rails-compass 源代码后,发现 rails-compass 覆盖了导致问题的两个方法 https://github.com/Compass/compass-rails/blob/master/lib/compass-rails/patches/compass.rbhttps://github.com/Compass/compass-rails/blob/master/lib/compass-rails/patches/3_1.rb。为了解决这个问题,在我的情况下,必须把 [root]/public目录下的icons和icons-retina文件夹

    【讨论】:

    • 您应该将您的问题标记为已回答:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2012-04-08
    • 2019-07-01
    相关资源
    最近更新 更多