Ruby on rails 在ruby中查看目录

Ruby on rails 在ruby中查看目录,ruby-on-rails,ruby,filesystemwatcher,Ruby On Rails,Ruby,Filesystemwatcher,我们有一个应用程序,需要处理放入目录中的传入文件。 我正在寻找最好的方法来做到这一点 我们一直在使用一个循环Backgroundrb过程,但是,老实说Backgroundrb是不可靠的,如果可能的话,我们想远离它 延迟的工作似乎不是针对正在进行的任务,而是一次性的 我发现DirectoryWatcher看起来很有希望,但理想情况下,我们希望对此有一些控制,并且能够监控它是否启动 因此,要求如下: 长跑 按顺序处理文件 可监控 有什么方法重新启动它并确保它启动(上帝?) 谢谢你的意见!这应该不

我们有一个应用程序,需要处理放入目录中的传入文件。 我正在寻找最好的方法来做到这一点

我们一直在使用一个循环Backgroundrb过程,但是,老实说Backgroundrb是不可靠的,如果可能的话,我们想远离它

延迟的工作似乎不是针对正在进行的任务,而是一次性的

我发现DirectoryWatcher看起来很有希望,但理想情况下,我们希望对此有一些控制,并且能够监控它是否启动

因此,要求如下:

  • 长跑
  • 按顺序处理文件
  • 可监控
  • 有什么方法重新启动它并确保它启动(上帝?)
谢谢你的意见!这应该不难,我很惊讶在网上找不到其他人谈论这件事,因为我本以为在商业应用中这并不少见。


这通常用于自动运行单元测试,但也应该适合您的需要

我知道的三个老学校选项:

Ara T.Howard's DirWatch:

  • 文件:
  • 下载:
我自己的董事观察者:

  • 文件:
  • 下载:
保罗·霍曼的文件系统观察者:

  • 文件:
  • 下载:
    • 还有:

      Guard通过在修改文件或目录时运行自定义规则来自动化各种任务

      软件开发人员、web设计人员、作家和其他专家经常使用它来避免平凡、重复的操作和命令,例如在更改源文件或配置后“重新启动”工具

      常见用例包括:IDE替换、web开发工具、设计“智能”和“响应”构建系统/工作流、自动化各种项目任务以及安装/监控各种系统服务

      谢谢,作为rails的新手,我想在rails应用程序中查看文件,而不是从命令行。与这里的其他选项相比,发现这是一个非常简单的2步:

    • 将此添加到gem文件:

      gem 'listen', '~> 2.0'
      
    • 然后在Application.rb中添加以下内容以在应用程序启动时执行:

      listener = Listen.to('public/json_import') do |added| 
        puts "added absolute path: #{added}"
      end
      listener.start # not blocking
      
    • 我们还可以侦听多个目录,还可以修改/添加/删除:

      listener = Listen.to('dir/to/listen', 'dir/to/listen2') do |modified, added, removed|
      
      我想应该对你有用。 使用此gem的示例

      require 'rb-inotify'
      notifier = INotify::Notifier.new
      notifier.watch("/tmp", :moved_to, :create) do |event|
          puts "#{event.absolute_name} is now in path /tmp!"
      end
      notifier.run
      

      还有一个小小的文件观察者rubygem。gem没有依赖项,不包含特定于平台的代码,只通过轮询检测更新、删除和添加

      require 'filewatcher'
      
      FileWatcher.new(["directory"]).watch() do |filename, event|
        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
      

      谢谢海基,看起来不错!这是一个新的替代FSSM项目如果您只需要文件系统通知,那么Guard的子项目listen可能会提供更细粒度的控制:这个gem是完美的,经过这么长时间后仍然可以维护
      filewatcher
      很好,但如果您通过SFTP一次性将一组文件上载到一个目录中,则无法正常工作(一些新文件未被检测到)。这就是我为此使用
      rb inotify
      的原因。