2011-01-20 95 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