2011-01-20 99 views
26

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

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

Delayed_job似乎并不适用于正在进行的任务,而是一次性完成。

我发现DirectoryWatcher http://codeforpeople.rubyforge.org/directory_watcher/看起来很有希望,但理想情况下我们希望对此有一些控制,并且能够监控它是否已启动。

所以要求是:

  • 运行永远为了
  • 流程文件
  • 可监测的
  • 有某种重新开始它和保证方式它是由(神?)

感谢您的任何意见!这应该不困难,我很惊讶我无法在网络上找到其他人在讨论这个问题,因为我以为在商业应用程序中这并不罕见。

+1

https://github.com/ttilley/fssm – Heikki 2011-01-20 13:02:17

+0

谢谢Heikki,看起来不错! – phil 2011-01-20 18:20:20

回答

11

还有还有guard

卫队运行自定义规则,只要文件或目录被修改自动化各种任务。

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

常见的使用案例包括:一个IDE更换,Web开发工具,设计“智能”和“响应”构建系统/流程,各种自动化项目任务和安装/监视各种系统服务...

3
12

感谢@emerge,作为rails的相对新手,我想在我的Rails应用程序中观看文件,而不是从命令行观看。比起这里的其他选项,发现Listen是一个令人难以置信的简单的2步:

  1. 将此添加到创业板文件:

    gem 'listen', '~> 2.0' 
    
  2. 然后在application.rb中添加这对应用程序执行启动:

    listener = Listen.to('public/json_import') do |added| 
        puts "added absolute path: #{added}" 
    end 
    listener.start # not blocking 
    

我们还可以收听到多个显示目录,并修改/添加/雷姆Ove:

listener = Listen.to('dir/to/listen', 'dir/to/listen2') do |modified, added, removed| 
0

我认为https://github.com/nex3/rb-inotify应该适合你。 一个例子来使用这个宝石

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 
8

还有微小filewatcher ruby​​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