Как правильно завершить работу и получить уведомление, если очистка экрана не выполняется в ruby ​​на рельсах - PullRequest
1 голос
/ 25 сентября 2010

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

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

Мой текущий план выглядит следующим образом.

  1. У меня будет проверка моей модели для большинства полей.Если они потерпят неудачу, я не получу плохие данные в мою систему.Хотя регистрация этого сбоя значимым образом все еще является проблемой.

  2. Я думал о каком-то счетчике, где после стольких сбоев из определенного источника я каким-то образом отключал его.Не уверен, как отследить это.Я предполагаю, что единственный способ - это иметь поле в моей модели Source, которое считает его и может быть сброшено.

  3. Ведение журнала - горилла 800 фунтов, я не знаю, как с этим бороться.Я мог бы просто сделать стандартную запись в журналы, но если что-то не получается, я хотел бы сохранить весь HTML, чтобы я мог разобраться.Также мне нужно как-то уведомить себя, чтобы я мог решить проблемы.Я подумал, может быть, просто создать модель для всего этого и сохранить ее в базе данных.Если бы я сделал это, мне, вероятно, пришлось бы хранить html на s3 или что-то еще.Я запускаю это на герою, так что это влияет на то, что я могу сделать.

  4. Начинается установка и спасение блоков вокруг каждого поля.Я пытался выяснить, как это лучше кодировать, так что у меня просто нет страницы с ними, но, хотя у меня есть некоторые поля, просто вверх doc.css_at ("# что угодно"), есть довольночисло, которое требует различного форматирования или вычислений, поэтому я думаю, что имеет смысл попытаться спасти это, чтобы я мог затем записать, что пошло не так.Другой вариант - позволить исключению всплыть и поймать его, когда я пытаюсь создать модель.

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

1 Ответ

1 голос
/ 25 сентября 2010

Наша команда делает что-то похожее на это, поэтому вот несколько идей:

  • мы используем действительно начальную / спасательную транзакцию высокого уровня, чтобы убедиться, что мы не попадаем в странные наполовину загруженные состояния:
begin
  ActiveRecord::Base.transaction do
    ...try to load a data source...
  end
rescue
  ...error handling...
end
  • Электронная почта / страница самостоятельно при возникновении определенных ошибок.Мы используем exception_notifier , но если вы сидите на Heroku, плагин Exceptional также кажется хорошим вариантом.Я также слышал о людях, которые добились успеха w / hoptoad

  • Захват состояния ОЧЕНЬ важен для устранения неполадок.GMail - это то, что хорошо сработало для нас.Наши загрузчики фактически имеют две фазы:

    1. сбор данных и отправка их на нашу учетную запись Gmail
    2. вход в Gmail, загрузка последних данных и анализ их

Второй этап является сложным, и в случае неудачи разработчик может просто войти в учетную запись gmail и легко проверить сообщение об ошибке.Этот процесс имеет некоторые ограничения (для хранения электронной почты и для каждого почтового ящика, двухфазный конвейер и т. Д.), И мы начали это делать, потому что у нас не было другого варианта, но он оказался шокирующе устойчивым и удобным.Имейте в виду электронную почту как дешевый / простой способ хранения некритического состояния.Мы не начинали думать о том, чтобы использовать его таким образом, и теперь очень рады, что делаем это.Вход в GMail удобнее, чем копаться в файлах журналов.

  • Создание пользовательского интерфейса панели инструментов.У нас есть простая панель инструментов с сеткой источников по дням, которая выглядит следующим образом .Каждый блок окрашивается в красный или зеленый цвет в зависимости от того, была ли успешной загрузка этого источника в этот день.Вы можете сделать еще один шаг и настроить монитор на этом пользовательском интерфейсе (mon.itor.us или аналогичный), который выдает предупреждение при достижении некоторого порога ошибки.
...