我有两个Ruby文件:exec.rb和lib.rb. lib.rb是exec.rb所必需的。每次我修改lib.rb时,我都需要重新启动exec.rb.在运行时动态重新加载somefile.rb?
是否有可能让exec.rb在运行时重新加载lib.rb?
我有两个Ruby文件:exec.rb和lib.rb. lib.rb是exec.rb所必需的。每次我修改lib.rb时,我都需要重新启动exec.rb.在运行时动态重新加载somefile.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
我在过去使用过类似的技术,它运行良好。我设定了每隔五分钟只检查一次,但您的需求可能会有所不同。