ruby on rails - viendo un directorio en ruby
ruby-on-rails filesystemwatcher (6)
Creo que https://github.com/nex3/rb-inotify debería funcionar para usted. Un ejemplo para usar esta gema.
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
Tenemos una aplicación que necesita procesar los archivos entrantes que se colocan en un directorio. Estoy buscando la mejor manera de hacer esto.
Hemos estado usando un proceso Backgroundrb en bucle, 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 en curso sino para una sola vez.
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 monitorear si está activo o no.
Así que los requisitos son:
- correr para siempre
- procesar archivos en orden
- ser monitoreable
- tiene algún tipo de manera de reiniciarlo y asegurarse de que está 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 empresariales esto no era raro.
Gracias emerge , como un novato relativo a los rieles quería ver los archivos en mi aplicación Rails y no desde la línea de comandos. Comparado con las otras opciones aquí, se encontró que github.com/guard/listen fue un simple paso de 2 pasos:
Agregado esto al archivo gema:
gem ''listen'', ''~> 2.0''
Luego agregó esto en Application.rb para ejecutarse en el inicio de la aplicación:
listener = Listen.to(''public/json_import'') do |added| puts "added absolute path: #{added}" end listener.start # not blocking
También podemos escuchar múltiples direcciones, y también modificar / agregar / eliminar:
listener = Listen.to(''dir/to/listen'', ''dir/to/listen2'') do |modified, added, removed|
También está el diminuto archivador rubygem. La gema no tiene dependencias, no contiene ningún código específico de la plataforma y simplemente detecta actualizaciones, delecciones y adiciones mediante 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
Tres opciones de la vieja escuela que conozco:
El reloj de Ara T. Howard:
- Docs: http://codeforpeople.com/lib/ruby/dirwatch/dirwatch-0.9.0/README
- Descargar: http://codeforpeople.com/lib/ruby/dirwatch/dirwatch-0.9.0.tgz
Mi propio DirectoryWatcher:
- Docs: http://phrogz.net/RubyLibs/rdoc/files/DirectoryWatcher_rb.html
- Descargar: http://phrogz.net/RubyLibs/DirectoryWatcher.rb
FileSystemWatcher de Paul Horman:
Y también hay guard :
Guard automatiza varias tareas ejecutando reglas personalizadas cada vez que se modifican archivos o directorios.
Es frecuentemente usado por desarrolladores de software, diseñadores web, escritores y otros especialistas para evitar acciones y comandos mundanos y repetitivos como las herramientas de "relanzamiento" después de cambiar los archivos de origen o las configuraciones.
Los casos de uso comunes incluyen: un reemplazo IDE, herramientas de desarrollo web, diseño de sistemas / flujos de trabajo "inteligentes" y "responsivos", automatización de varias tareas del proyecto e instalación / monitoreo de varios servicios del sistema ...
https://github.com/mynyml/watchr
Normalmente se usa para ejecutar la prueba de la unidad automáticamente, pero también debe adaptarse a sus necesidades.