просмотр каталога в рубине - PullRequest
26 голосов
/ 20 января 2011

У нас есть приложение, которое должно обрабатывать входящие файлы, которые помещаются в каталог. Я ищу лучший способ сделать это.

Мы использовали циклический процесс Backgroundrb, но, честно говоря, Backgroundrb ненадежен, и мы хотели бы от него отказаться, если это возможно.

Delayed_job, кажется, не для текущих задач, а для одного.

Я нашел DirectoryWatcher http://codeforpeople.rubyforge.org/directory_watcher/, который выглядит многообещающе, но в идеале мы хотим иметь некоторый контроль над этим и также иметь возможность отслеживать, если он работает или нет.

Итак, требования:

  • бежать вечно
  • обработка файлов в порядке
  • быть контролируемым
  • есть какой-то способ перезапустить его и убедиться, что он работает (Бог?)

Спасибо за любой вклад! Это не должно быть сложно, и я удивлен, что не могу найти кого-то еще, говорящего об этом в Интернете, поскольку я думал бы, что в бизнес-приложениях это не было редкостью.

Ответы [ 6 ]

12 голосов
/ 11 марта 2014

Спасибо @ emerge , как новичок в рельсах, я хотел следить за файлами в моем приложении Rails, а не из командной строки. По сравнению с другими вариантами здесь, обнаружил, что Слушать было невероятно простым 2 шага:

  1. Добавил это в файл gem:

    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
    

Мы также можем прослушивать несколько каталогов, а также изменять / добавлять / удалять:

listener = Listen.to('dir/to/listen', 'dir/to/listen2') do |modified, added, removed|
11 голосов
/ 20 января 2011

А еще есть охранник :

Guard автоматизирует различные задачи, выполняя пользовательские правила при изменении файла или каталогов.

Он часто используется разработчиками программного обеспечения, веб-дизайнерами, писателями и другими специалистами, чтобы избежать обыденных, повторяющихся действий и команд, таких как «перезапуск» инструментов после изменения исходных файлов или конфигураций.

Типичные случаи использования: замена IDE, инструменты веб-разработки, проектирование "умных" и "отзывчивых" систем / рабочих процессов сборки, автоматизация различных задач проекта и установка / мониторинг различных системных служб ...

9 голосов
/ 12 октября 2014

Есть также крошечный рубчик файлового наблюдателя.Драгоценный камень не имеет зависимостей, не содержит кода для конкретной платформы и просто обнаруживает обновления, дополнения и добавления по опросу.

3 голосов
/ 20 января 2011

Три варианта старой школы, о которых я знаю:

DirWatch Ара Т. Говарда:

Мой собственный каталогWatcher:

FileSystemWatcher Пола Хормана:

1 голос
/ 20 января 2011

https://github.com/mynyml/watchr

Обычно используется для автоматического запуска модульного тестирования, но также должно соответствовать вашим потребностям.

0 голосов
/ 31 августа 2014

Я думаю 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...