Ruby 如何使用指南针生成精灵图像文件? 背景

Ruby 如何使用指南针生成精灵图像文件? 背景,ruby,sass,compass-sass,css-sprites,Ruby,Sass,Compass Sass,Css Sprites,我有一个图像目录,app/assets/images/sprites/flags/*.png将被sprite。指南针、Sass和链轮一起工作,这样我就可以 @import "sprites/flags/*.png"; ... .flag.en { @include flags-sprite(en) } 在我的.scss文件中。这样,Compass在编译SCSS文件时会生成文件app/assets/images/sprites/flags-abc123.png 问题 我想通过Rake任务或s

我有一个图像目录,
app/assets/images/sprites/flags/*.png
将被sprite。指南针、Sass和链轮一起工作,这样我就可以

@import "sprites/flags/*.png";
...
.flag.en {
  @include flags-sprite(en)
}
在我的
.scss
文件中。这样,Compass在编译SCSS文件时会生成文件
app/assets/images/sprites/flags-abc123.png

问题 我想通过Rake任务或shell命令预编译
flags-abc123.png
文件,而不编译我的
.scss
文件。有没有办法做到这一点

根本原因 编译应用程序中的所有
.scss
文件是部署过程中很长的一部分。我们希望通过在一台机器上生成并分发部署来加快部署速度。不幸的是,其他机器会生成坏的缓存破坏URL,因为它们缺少已编译的sprite文件。如果我们可以预编译sprite文件,我们可以大大加快部署速度

我试过的
我试着运行bundle exec compass sprite app/assets/images/sprites/flags/*.png。它生成
app/assets/stylesheets/_flags.scs
,但不生成
app/assets/images/sprites/flags-abc123.png
,我最后做了一个Rake任务:

class SpriteTask
  include Rake::DSL

  attr_reader :file_task

  def initialize(glob)
    @glob = glob
    build_compass_sprite_map
    define_task
  end

  private

  attr_reader :glob, :map

  def build_compass_sprite_map
    uri = Sass::Script::String.new(glob)
    context = Object.new
    kwargs = {}
    kwargs.extend Compass::SassExtensions::Functions::Sprites::VariableReader
    @map = Compass::SassExtensions::Sprites::SpriteMap.from_uri uri, context, kwargs
    @map.options = {}
  end

  def define_task
    @file_task = file(map.filename => map.image_filenames) do |task|
      map.generate
    end
  end
end
像这样使用它:

require 'sprite_task'
namespace :sprites do
  task :generate do
    SpriteTask.new('foo/*.png').file_task.invoke
    SpriteTask.new('bar/*.png').file_task.invoke
  end
end

能否添加compass项目的config.rb?