1

我有两个 Ruby 文件:exec.rb 和 lib.rb。exec.rb 需要 lib.rb。每次修改lib.rb,都需要重启exec.rb。

运行时是否可以让 exec.rb 重新加载 lib.rb?

4

2 回答 2

1

您可以订阅文件更改通知。这是 osx 的一个库:rb-fsevent

当您收到文件更改的通知时,您可以重新加载它。

filename = './lib.rb' # get file name from event
load filename

您应该使用load而不是require,因为require只加载文件一次,然后不会再次加载它。

于 2013-02-15T07:12:11.990 回答
1

可以使用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

我过去使用过类似的技术,效果很好。我设置了我的,所以它每五分钟检查一次,但您的需求可能会有所不同。

于 2013-02-15T13:14:15.327 回答