Ruby 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

Что я замечаю, так это то, что со временем он становится все медленнее и медленнее и заставляет мой процессор работать на максимуме. Я делаю это впервые, но в основном я хочу следить за этими типами файлов в своем проекте, компилировать компас на sass и копировать любой измененный файл в их аналоги в другом проекте, на который указывает IIS.

Мой главный вопрос заключается в том, как предотвратить перегрев моего процессора, и есть ли какие-либо улучшения, чтобы сделать этот тип действий более эффективным?


person thematt    schedule 22.08.2014    source источник


Ответы (1)


Из того, что я вижу, вы копируете файлы из одного каталога в другой - в то время как оба каталога просматриваются, и ваши правила соответствуют как исходным каталогам, так и целевым каталогам, что вызывает изменения, которые снова запускают копирование, пока все, что происходит, является постоянным копированием ...

Решение состоит в том, чтобы отслеживать только одну папку и выводить файлы в неотслеживаемую папку.

Лучше всего поместить все ваши исходные файлы, например. 'src' и установите server_root, например. «public», а затем скажите охраннику смотреть только «src» одним из следующих способов:

  • передача каталога src для просмотра в командной строке: bundle exec guard -w src

  • или установить новую опцию directories в Guardfile:

    directories(%w(src))
    

Другой вариант - игнорировать место назначения, в которое вы скопировали файлы, например. в вашем Guardfile

    ignore([/^public\//])

чтобы копирование файлов туда не запускало копирование снова и снова.

Здесь вы можете найти полезную информацию: https://github.com/guard/guard/wiki/Understanding-Guard

(Есть подсказки, которые показывают вам, что происходит под капотом, так что вы можете понять, что именно вызывает какое действие).

person Cezary Baginski    schedule 17.12.2014