We have an application that needs to process incoming files that are dropped into a directory. I am looking for the best way to do this.
We have been using a looping Backgroundrb process, but, to be honest Backgroundrb is unreliable and we'd like to move away from it if possible.
Delayed_job doesn't seem to be for ongoing tasks but for one offs.
I've found DirectoryWatcher http://codeforpeople.rubyforge.org/directory_watcher/ which looks promising, but ideally we want to have some control over this and also be able to monitor if it is up or not.
So the requirements are:
Thanks for any input! This shouldn't be difficult and I am surprised I can't find someone else talking about this on the web as I would have thought that in business applications this was not uncommon.
Thanks @emerge, as a relative newbie to rails I wanted to watch for files in my Rails app and not from the command line. Compared to the other options here, found that Listen was an incredibly simple 2 steps:
Added this to the gem file:
gem 'listen', '~> 2.0'
Then added this in Application.rb to execute on app startup:
listener = Listen.to('public/json_import') do |added|
puts "added absolute path: #{added}"
end
listener.start # not blocking
We can also listen to multiple dirs, and also modify/add/remove:
listener = Listen.to('dir/to/listen', 'dir/to/listen2') do |modified, added, removed|