Ruby Guard与Compass Watch

时间:2014-08-22 18:51:15

标签: ruby compass-sass guard

我的.net项目中有以下保护文件:

# Listen for chanes to css|js|cshtml files, copy to server_root, creating new folders as necessary
watch(%r{.+\.(css|js|cshtml?)$}) do |match|
    puts Time.now.asctime + ': '+ match[0] + ' has changed'
    copy_path = server_root + File.dirname(match[0])
    if Dir.exists?(copy_path) == false
        FileUtils.mkdir_p(copy_path)
    end
    FileUtils.cp_r(match[0], copy_path)
end


# Listen for changes to Sass files, compile to local folder
puts `compass compile --time --quiet`
guard :compass do
    watch(%r{(.*)\.s[ac]ss$})
end

我注意到的是,随着时间的推移它越来越慢,导致我的CPU运行到最大值。这是我第一次这样做,但基本上我想在我的项目中查看这些类型的文件,在sass上进行罗盘编译,并将任何已更改的文件复制到IIS指向的另一个项目中的对应文件。

我的主要问题是如何防止它导致我的CPU运行热,并且是否有任何改进使这种类型的操作更有效?

1 个答案:

答案 0 :(得分:0)

从我看到你正在将文件从一个目录复制到另一个目录 - 同时监视两个目录,并且规则匹配源目录和目标目录,这会触发更改,这会再次触发复制,直到所有发生的事情发生不断复制......

解决方案是仅观看一个文件夹并将文件输出到未观看的文件夹。

最好将所有源文件放入例如'src'并将server_root设置为例如'公开',然后告诉警卫只能通过以下方式观看'src':

  • 在命令行中传递要监视的src目录:bundle exec guard -w src

  • 或在directories中设置新的Guardfile选项:

    directories(%w(src))
    

另一种选择是忽略您复制文件的目的地,例如:在Guardfile

    ignore([/^public\//])

这样复制文件就不会一遍又一遍地触发复制。

您可以在此处找到一些有用的信息:https://github.com/guard/guard/wiki/Understanding-Guard

(有一些提示可以向您展示幕后发生的事情,因此您可以确切地触发哪一项行动)。