我有兩個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
我在過去使用過類似的技術,它運行良好。我設定了每隔五分鐘只檢查一次,但您的需求可能會有所不同。