我有两个 Ruby 文件:exec.rb 和 lib.rb。exec.rb 需要 lib.rb。每次修改lib.rb,都需要重启exec.rb。
运行时是否可以让 exec.rb 重新加载 lib.rb?
我有两个 Ruby 文件:exec.rb 和 lib.rb。exec.rb 需要 lib.rb。每次修改lib.rb,都需要重启exec.rb。
运行时是否可以让 exec.rb 重新加载 lib.rb?
您可以订阅文件更改通知。这是 osx 的一个库:rb-fsevent。
当您收到文件更改的通知时,您可以重新加载它。
filename = './lib.rb' # get file name from event
load filename
您应该使用load
而不是require
,因为require
只加载文件一次,然后不会再次加载它。
可以使用File.mtime
并比较 lib.rb 的最后修改时间戳来执行此操作。
在您的代码中,获取mtime
首次加载文件的时间:
last_mtime = File.mtime('lib.rb')
load 'lib.rb'
稍后,在您处理的循环中,再次检查修改时间是否更改,并在必要时重新加载:
current_mtime = File.mtime('lib.rb')
if (current_mtime != last_mtime)
last_mtime = current_mtime
load 'lib.rb'
end
我过去使用过类似的技术,效果很好。我设置了我的,所以它每五分钟检查一次,但您的需求可能会有所不同。