v1.3. от 14.08.2022
Теперь файлы сохраняются на сервере, а парсинг осуществляется в фоновом задании, вне запроса загрузки файлов. Пока не нашёл как вернуть сообщение пользователю об окончании задания. Пользователь сам должен проверять готовность, отправляя запрос.
v1.2. от 11.08.2022
Папку public/data, в которой лежит файл result.csv вчера добавил в .gitignore. А сегодня оказалось, что пустые папки гит не отслеживает. После выгрузки на гитхаб и автодеплоя прод перестал работать, т.к. папка data отстутствует. Решил проблему, добавив файл .keep в папку data. Сделал тестовый контур с автодеплоем, а от прода автодеплой отключил. Научился пользоваться логами heroku. Очень они помогли, т.к. локально приложение работало, а на сервере нет из-за отсутствия папки data.
v1.1. от 10.08.2022
В приложении небольшие изменения: удалена модель и миграция, добавлен фавикон. Создал репозиторий на гитхабе (первый был на heroku), связал его с heroku, настроил автодеплой. Теперь при помещении изменений на гитхаб они сразу попадают в прод.
v1.0. от 09.08.2022
Приложение предназначено для парсинга PDF файлов резюме с сайта hh.ru.
На вход подаются файлы резюме, на выходе получается csv файл следующего формата:
Имя файла ; блок "отклик на вакансию" ; фамилия ; имя ; отчество ; телефон1 ; телефон2 ; e-mail
В дальнейшем файл будет загружаться в СРМ-систему.
Заказчиком выступил мой друг. Для него это реальная производственная задача и учебная задача для меня.
На этой задаче я научился:
- загружать файлы на сервер
- загружать файлы на сервер множественным выбором
- преобразовывать pdf в текст (гем)
- искать телефоны и e-mail'ы в тексте (регулярные выражения)
- понимать, почему не работает регулярное выражение (неразрывный пробел в тексте)
- работать с массивами (объединять в строку)
- работать со строками
- разбивать на массив, в том числе с фикс. кол-вом элементов
- удалять символы из строки
- удалять пробелы в начале и конце строки
- хранить загруженные файлы в папке на сервере
- удалять файлы с сервера после использования
- отправлять post и get запросы из шаблона (view) на сервер
- прописывать маршруты (routes)
- использовать match и gsub
- создавать csv файлы (гем)
- изменять кодировку (с UTF-8 на cp1251)
- использовать flash[:notice] для создания ссылки на скачивание файла
Что не получилось:
-
парсить загруженный pdf файл без сохранения на сервере. Т.к. гем 'pdf-reader' принимает на вход имя файла, самым простым (но не изящным) решением было записать файл в папку на сервере и передать ему имя. Варианты решения:
- поискать другой гем, который сможет принимать на вход сам файл
- взять исходник этого гема и доработать его соответствующим образом
-
сделать редирект на главную страницу после скачивания файла. Варианты решения есть в интернете, но сходу не получилось с ними разобораться. Нужно глубже изучить материал и вернуться позже к этой проблеме.
Проект сдан заказчику на тестирование, т.к. даже без редиректа функционал полностью работоспособен.
Задача решалась (и была решена!) в балансе между обучением и получением готового рабочего варианта для заказчика. Попытка сделать решение технически идеальным (уклон в обучение) привела бы затягиваю срока сдачи, вплоть до бесконечности. Попытка сделать рабочий вариант быстрее, не обращая внимания на шероховатости, привела бы к просадке в обучении.
На версию 1.0 было потрачено 3 дня от постановки задачи до сдачи проекта заказчику. Результатом доволен. Вероятно, я продолжу дорабатывать проект. С редиректом после скачивания файла уж точно надо разобраться.
Выражаю благодарность команде "Хороший программист", по материалам которой я обучаюсь. В особенности их совету, данному здесь: https://rubyrush.ru/steps/what-to-do-next-04 Благодаря ему я и получил эту задачу, которая продвинула меня в обучении.
10.08.2022 ruby: 3.2.1 rails 7.0.3.1 gems: 'pdf-reader', 'csv'