我的.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运行热,并且是否有任何改进使这种类型的操作更有效?
答案 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
(有一些提示可以向您展示幕后发生的事情,因此您可以确切地触发哪一项行动)。