2011-01-20 18 views
26

Tenemos una aplicación que necesita para procesar los archivos entrantes que se eliminan en un directorio. Estoy buscando la mejor manera de hacerlo.viendo un directorio en ruby ​​

Hemos estado utilizando un proceso de bucle de Backgroundrb, pero, para ser honesto, Backgroundrb no es confiable y nos gustaría alejarnos de él si es posible.

Delayed_job no parece ser para tareas continuas, sino para una.

He encontrado DirectoryWatcher http://codeforpeople.rubyforge.org/directory_watcher/ que parece prometedor, pero idealmente queremos tener algo de control sobre esto y también poder controlar si está activo o no.

lo que los requisitos son:

  • correr para siempre
  • archivos de proceso con el fin
  • ser controlables
  • tienen algún tipo de forma para reanudar y asegurando que es hacia arriba (Dios?)

¡Gracias por cualquier entrada! Esto no debería ser difícil y me sorprende que no pueda encontrar a alguien más hablando de esto en la web, ya que habría pensado que en las aplicaciones comerciales esto no era raro.

+1

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

+0

Gracias Heikki, se ve bien! – phil

+5

https://github.com/guard/listen Este es el nuevo proyecto de reemplazo FSSM – emerge

Respuesta

11

Y también hay guard:

Guardia automatiza varias tareas mediante la ejecución de reglas personalizadas cada vez que el archivo o directorios se modifican.

Es utilizado con frecuencia por desarrolladores de software, diseñadores web, escritores y otros especialistas para evitar acciones repetitivas y mundanas y comandos como "relanzar" herramientas después de cambiar archivos de origen o configuraciones.

casos de uso más comunes incluyen: un reemplazo IDE, herramientas de desarrollo web, el diseño "inteligente" y "sensible" construir sistemas/flujos de trabajo, la automatización de diversas tareas del proyecto y la instalación/supervisión de diversos servicios del sistema ...

+2

Si todo lo que necesita son notificaciones del sistema de archivos, entonces el subproyecto __listen__ de Guard podría ofrecer un control más detallado: http://rubygems.org/gems /escucha – tompave

3
12

Gracias @emerge, como novato en los rails, quería ver los archivos en mi aplicación Rails y no desde la línea de comandos. En comparación con las otras opciones aquí, encontraron que era un Listen increíblemente simples 2 pasos:

  1. añadió esta en el fichero de joya:

    gem 'listen', '~> 2.0' 
    
  2. Luego añade esto en application.rb la ejecución según la aplicación inicio:

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

también podemos escuchar a varios directorios, y también modificar/añadir/rem ove:

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

Creo que https://github.com/nex3/rb-inotify debería funcionar para usted. Un ejemplo de usar esta joya

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

También existe la pequeña rubygem FileWatcher. La gema no tiene dependencias, no contiene un código específico de plataforma y simplemente detecta actualizaciones, saltos y adiciones por sondeo.

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 
Cuestiones relacionadas