Подтвердить что ты не робот

Просмотр каталога в рубине

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

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

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

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

Таким образом, требования:

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

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

4b9b3361

Ответ 1

И там также guard:

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

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

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

Ответ 2

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

  • Добавлено это в файл gem:

    gem 'listen', '~> 2.0'
    
  • Затем добавлено это в Application.rb для запуска при запуске приложения:

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

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

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

Ответ 3

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

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

Ответ 4

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

Ara T. Howard DirWatch:

Мой собственный DirectoryWatcher:

Пол Хорман FileSystemWatcher:

Ответ 5

https://github.com/mynyml/watchr

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

Ответ 6

Я думаю, 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