2012-06-20 2 views
2

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

вот код, который находится в конфигурационном/инициализаторах/listen.rb:

Thread.new do 
    puts "listening to changes in db/data directory" 
    File.open("db/data/test.txt", 'a+'){ |f| f.puts "hello"} 
    Listen.to("db/data", :filter => /\.yml$/, :ignore => %r{ignored/path/}) do |modified, added, removed| 
     File.open("db/data/test.txt", 'a+'){ |f| f.puts "file changed"} 
     puts "file changed" 
    end 
end 

, когда я запускаю рельсы утешать его печатает «слушать изменения в/данных каталога БД» линии и киосков.

Я думаю, что это имеет какое-то отношение к многопоточности и блокировке.

Есть ли способ запустить прослушивание с консоли?

спасибо, Михал Yashpe

ответ

0

List.to блок не дозвонились, пока не будут внесены изменения после Listen.to называется. Вы пытаетесь изменить файлы до и после, Listen запускает событие изменения.

Перемещение «файл изменен» тушит сторону Thread.new

Thread.new do 
     puts "listening to changes in db/data directory" 

     Listen.to("db/data", :filter => /\.yml$/) do |modified, added, removed| 
     File.open("db/data/test.txt", 'a+'){ |f| f.puts "file changed"} 
     puts "file changed" 
     end 
    end 
File.open("db/data/test.txt", 'w+'){ |f| f.puts "changed now"} 

Попробуйте метод обратного вызова тоже и ELIM нить: https://github.com/guard/listen#changes-callback

0

Я знаю, что это старый вопрос, но я буду дайте мой ответ всем, кто ищет это. Выходит или выходит? В любом случае, предположим, что выход ...

Когда вы запускаете свое приложение для рельсов, оно не выходит, и именно поэтому оно работает, а слуховой камень, как сказал Мэтт, вызывает блок после вызова Listen.to. Когда вы запускаете скрипт из консоли rails, он просто выполнит все, а затем выйдет. Вам нужно добавить sleep или gets в конец, чтобы убедиться, что ваш скрипт никогда не выходит.

Смежные вопросы