保护/听gem在控制台上工作

时间:2012-06-20 07:57:01

标签: ruby-on-rails ruby multithreading guard listen

当我运行rails服务器时,guard / listen gem工作正常 - 它会监听文件中的更改,并在发生更改后运行各种脚本。 但是 - 当我运行rails console时,它不会工作。

这里是config / initializers / 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

当我运行rails console时,它打印"监听db / data目录中的更改"线和摊位。

我认为它与多线程和阻塞有关。

有没有办法用控制台运行监听?

感谢, Michal Yashpe

2 个答案:

答案 0 :(得分:0)

在调用 Listen.to之后进行更改之前,不会调用List.to块。您正试图在之前和之后更改文件,以便触发更改事件。

移动“文件已更改”,将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"}

尝试回调方法并删除线程:https://github.com/guard/listen#changes-callback

答案 1 :(得分:0)

我知道这是一个老问题,但我会给那些寻找此问题的人提供答案。 它会停止还是退出?无论如何,它应该退出......

当你启动你的rails应用程序时,它不会退出,这就是它工作的原因,正如Matt所说,listen gem在调用Listen.to之后调用该块。当您从rails控制台启动脚本时,它将执行所有操作然后退出。 您需要在结尾添加sleepgets,以确保您的脚本永不退出。