2011-01-20 34 views
26

Chúng tôi có một ứng dụng cần xử lý các tệp đến được đưa vào thư mục. Tôi đang tìm cách tốt nhất để làm điều này.xem thư mục trong ruby ​​

Chúng tôi đã sử dụng quy trình Backgroundrb lặp lại, nhưng, thành thật mà nói Backgroundrb không đáng tin cậy và chúng tôi muốn di chuyển ra khỏi nó nếu có thể.

Delayed_job dường như không dành cho các tác vụ đang diễn ra mà chỉ cho một lần tắt.

Tôi đã tìm thấy DirectoryWatcher http://codeforpeople.rubyforge.org/directory_watcher/ có vẻ đầy hứa hẹn, nhưng lý tưởng là chúng tôi muốn có một số quyền kiểm soát điều này và cũng có thể theo dõi xem nó có hoạt động hay không.

Vì vậy, yêu cầu là:

  • chạy mãi mãi
  • xử lí file theo thứ tự
  • được giám sát
  • có một số loại cách khởi động lại nó và đảm bảo nó là lên (Đức Chúa Trời?)

Cảm ơn mọi đầu vào! Điều này không nên khó khăn và tôi ngạc nhiên khi tôi không thể tìm thấy một người nào khác nói về điều này trên web như tôi đã nghĩ rằng trong các ứng dụng kinh doanh, điều này không phổ biến.

+1

https://github.com/ttilley/fssm – Heikki

+0

Cảm ơn Heikki, có vẻ tốt! – phil

+5

https://github.com/guard/listen Đây là dự án FSSM thay thế mới – emerge

Trả lời

11

Và có cũng guard:

Guard tự động hóa các nhiệm vụ khác nhau bằng cách chạy quy tắc tùy chỉnh bất cứ khi nào tập tin hoặc thư mục được sửa đổi.Nó thường được các nhà phát triển phần mềm, nhà thiết kế web, nhà văn và các chuyên gia khác sử dụng để tránh các hành động và lệnh phức tạp, lặp đi lặp lại như công cụ "khởi chạy lại" sau khi thay đổi các tệp hoặc cấu hình nguồn.

trường hợp sử dụng thường gặp bao gồm: một thay thế IDE, công cụ phát triển web, thiết kế "thông minh" và "phản ứng nhanh" xây dựng hệ thống/quy trình công việc, tự động hóa các nhiệm vụ dự án khác nhau và các cài đặt/giám sát các dịch vụ hệ thống khác nhau ...

+2

Nếu tất cả những gì bạn cần là thông báo hệ thống tập tin, thì dự án __listen__ của Guard có thể cung cấp quyền kiểm soát chi tiết hơn: http://rubygems.org/gems /nghe – tompave

3
12

Cảm ơn @emerge, như một newbie tương đối để rails tôi muốn xem cho các tập tin trong ứng dụng Rails của tôi và không phải từ dòng lệnh. So với các tùy chọn khác ở đây, thấy rằng Listen là một cực kỳ đơn giản 2 bước sau:

  1. gia tăng này đến tập tin đá quý:

    gem 'listen', '~> 2.0' 
    
  2. Sau đó thêm vào này trong Application.rb để thực hiện trên ứng dụng khởi động:

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

Chúng tôi cũng có thể nghe nhiều dirs, và cũng có thể sửa đổi/thêm/rem ove:

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

Tôi nghĩ https://github.com/nex3/rb-inotify sẽ phù hợp với bạn. Ví dụ để sử dụng đá quý này

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

Ngoài ra còn có rubygem filewatcher nhỏ. Đá quý không có phụ thuộc, không chứa mã nền tảng cụ thể và chỉ phát hiện các bản cập nhật, sự phân biệt và bổ sung bằng cách bỏ phiếu.

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 
Các vấn đề liên quan