Запуск filewatcher как отдельного процесса - PullRequest
0 голосов
/ 06 марта 2019

Я все еще новичок в Ruby, поэтому надеюсь, что вы поможете.У меня есть приложение Ruby on Rails, которому нужно смотреть конкретный каталог «Dir A», в который я продолжаю добавлять текстовые файлы.Как только появляется новый файл, его необходимо обработать в CSV-файл, который затем появляется в каталоге tmp, прежде чем присоединиться к пользователю, и исчезает из tmp после того, как файл переходит в ActiveStorage, сохраняя исходный файл txt в «Dir A».на ограниченное количество времени.

Теперь я использую гем filewatcher для просмотра "Dir A", однако мне нужно, чтобы он запускался при запуске сервера и продолжал работать в фоновом режиме.Я понимаю, что мне нужно демонизировать процесс, но как я могу сделать это из файлов * .rb, а не из терминала?Я использую Threads, но я не уверен, что это лучшее решение ...

У меня также есть следующие проблемы: - как обрабатывать файлы, которые уже появились в папке до запуска сервера?- filewatcher, похоже, не получает другой новый файл, пока он еще обрабатывает предыдущий, и потоки, похоже, не помогают с этим - что бы вы посоветовали, чтобы быть лучшим способом отслеживания обработанных файлов - базы данных илипереименование / копирование файлов в другую папку, или некоторые глобальные переменные или, может быть, есть что-то еще?Мне нужно знать, какие файлы обрабатываются, поэтому я не повторяю этот процесс особенно в тех случаях, когда мне нужно запланировать перезапуски FileWatcher из-за его снижающейся производительности (документация FileWatcher гласит, что лучше всего перезапустить процесс, если он долго выполнялся)

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

1 Ответ

0 голосов
/ 07 марта 2019

Этот вопрос, вероятно, следует разделить на два: один о запуске filewatcher в качестве фонового процесса, а другой - об управлении обработанными файлами, но для filewatcher простое решение - использовать foremangem с Procfile.

Вы можете запустить свое приложение Rails в одном процессе и средство просмотра файлов в другом с помощью Procfile в корне вашего приложения, например:

# Procfile
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}
filewatcher: filewatcher "**/*.txt" "bundle exec rake process_txt_files"

, и перенести любую обработкунужно сделать в грабли.При этом вы можете просто запустить foreman start локально, чтобы запустить оба процесса, и если ваш производственный сервер поддерживает Procfiles (например, Heroku), это позволяет легко сделать то же самое в производственной среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...