Чтобы реализовать этот тип сценария использования, вы должны включить некоторую форму отслеживания прогресса в вашу работу.
Он может отчитываться в записи базы данных (что будет моделировать работу - рекомендуется, если вы делаете немного тяжеловесный импорт и вы хотите иметь возможность искать потом), но вы также можете отчитаться в какой-либо форме системы pub-sub (redis, Postgres, ActionCable ...), если вы хотите что-то более быстрое и более легкое .
Преобразование на самом деле является отличным местом для отслеживания прогресса, но это не означает, что вы должны отчитываться в каждой отдельной строке (потому что это приведет к записи SQL в каждой строке, что обычно слишком много !).
Я рекомендую сообщать о прогрессе только через каждые N строк, используя код, подобный следующему:
pre_process do
@count ||= 0
end
transform do |r|
@count += 1
if @count % 500 == 0
# TODO here: notify the report system
end
r
end
Вам захочется подумать о том, что произойдет, если ошибка произойдет, пока вы уведомляют систему отчетов: возможно, вы хотите остановить все, или, возможно, вы хотите продолжить.
Обязательно проследите также за началом работы, концом или f задание (успех / ошибка / полнота), чтобы убедиться, что у вас нет устаревших заданий.
Кажется, что «грязно» говорить с базой данных, но только потому, что мы смешиваем проблемы немного. Если вы делаете это каждые N строк и стараетесь не загрязнять основную систему, это прекрасно!
Надеюсь, это поможет, дайте мне знать, если вам нужна дополнительная помощь!