当我运行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
答案 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控制台启动脚本时,它将执行所有操作然后退出。
您需要在结尾添加sleep
或gets
,以确保您的脚本永不退出。