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

Ruby 如何每次重新加载外部文件?,ruby,Ruby,我有一个ruby脚本,其中我的“config”位于一个额外的文件中。它被称为ftp\u config.rb。然后我有了从ftp服务器下载文件的filetrack.rb——ftp_config.rb中指定了哪些文件/目录。最后我得到了rufus_download.rb,它每天都从filetrack.rb调用一个函数,所以我从服务器上获取所有新文件 一切正常,只是我想知道如何在编辑ftp_config.rb时,脚本将获取更改,而无需重新启动rufus_download.rb 当前 rufus_do

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

一切正常,只是我想知道如何在编辑ftp_config.rb时,脚本将获取更改,而无需重新启动rufus_download.rb

当前

  • rufus_download.rb包含
    require\u相对“文件跟踪”
  • filetrack.rb包含
    require\u relative'ftp\u config'

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

require_relative
返回
false
,如果您请求的文件已经加载到您的ruby脚本中,如果您没有,则返回
true

如果希望直接加载更改,则需要
加载
文件

load 'path/to/ftp_config'
每次脚本执行时,它都会加载/重新加载脚本

编辑:

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


load::File.expand_path('../ftp_config.rb',uuu文件)

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

编辑端


希望这能有所帮助

您需要一个gem来监控文件更改,比如sinatra和eg或桌面应用程序的“sinatra/reloader”。检测到更新后,您可以
加载脚本(不需要),该脚本只加载一次脚本

这里是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 

隐马尔可夫模型。。。很奇怪。刚刚编辑了我的答案,我看不到你的评论。基本上看一下更新/编辑后的答案。我删除了我的评论,因为如果我必须使用load两次或一次,我在四处查看时发现了答案(load“/ftp_config.rb”)。很抱歉造成混淆。您能建议使用
load'ftp\u config'
是否足够好,我也需要使用
load'filetrack'
吗?这取决于您的应用程序架构。从性能的角度来看,文件应该相对容易加载。如果你每天只需要一次应用程序,那么在你需要应用程序的任何时候加载这两个文件都应该是无缝的。如果我必须使用两次加载来重新加载配置,问题就更大了。我不明白它是怎么工作的。rufus调用filetrack.rb中的函数,filetrack使用ftp_config.rb。经验法则是代码只能依赖解释器加载的代码(读取MRI,ruby)。如果你有一个依赖项a->B和C->B。先加载a,然后加载B,然后执行应用程序。我的理解是,我希望总是加载C,依赖项是a(rufus)->B(文件跟踪)->C(ftp配置)