如何每次重新加载外部文件?

时间:2015-10-27 06:22:03

标签: ruby

我有一个ruby脚本,我的" config"是一个额外的文件。它被称为ftp_config.rb。然后我有filetrack.rb从ftp服务器下载文件 - 在ftp_config.rb中指定了哪些文件/目录。最后我得到rufus_download.rb每天从filetrack.rb调用一个函数,所以我从服务器获取所有新文件。

一切正常我只想知道如何制作它所以当我编辑ftp_config.rb时,脚本会选择更改,而无需重新启动rufus_download.rb。

当前

  • rufus_download.rb包含require_relative 'filetrack'
  • filetrack.rb包含require_relative 'ftp_config'

现在,如果我添加要下载到ftp_config.rb的新文件,我需要重新启动rufus

2 个答案:

答案 0 :(得分:2)

如果您请求的文件已加载到您的ruby脚本中,则

require_relative会返回false,如果您没有

,则会返回true

如果您想直接加载更改,则需要load个文件

load 'path/to/ftp_config'

每次脚本执行时,都会加载/重新加载脚本

编辑:

您可以通过展开当前ruby脚本的路径来加载:

load ::File.expand_path('../ftp_config.rb', __FILE__)

假设文件位于同一文件夹中

EDITEND

希望有所帮助

答案 1 :(得分:0)

你需要一个监视文件变化的gem,例如" sinatra / reloader"适用于Sinatra,例如filewatcherlisten适用于桌面应用。在检测到更新后,您load脚本(不需要)仅加载一次脚本。

这是filewatcher的一个例子。

STDOUT.sync = true

FileWatcher.new(['c:/test/scans']).watch() do |filename, event|
    puts filename
  if(event == :changed)
    puts "File updated: " + filename
  end
  if(event == :delete)
    puts "File deleted: " + filename
  end
  if(event == :new)
    puts "Added file: " + filename
  end
end