[英]How to fail gracefully and get notified if screen scraping fails in ruby on rails
我正在一個Rails 3項目中工作,該項目主要依靠屏幕抓取來收集數據,主要使用Nokogiri進行 。 我正在匯總基本上所有相同的數據,但是我從許多不同的來源中獲取數據,隨着時間的流逝,我將越來越多地添加它們。 但是,我非常清楚地知道,屏幕抓取可能非常不可靠。
因此,我對其他人如何處理驗證數據並在出現故障時得到通知的問題感興趣。
我目前的計划如下。
我將對大多數領域的模型進行驗證。 如果他們失敗了,我將不會將不良數據輸入我的系統。 盡管以有意義的方式記錄此故障仍然是一個問題。
我在考慮某種計數器,在某個特定來源發生了多次故障之后,我以某種方式將其關閉。 不確定如何跟蹤。 我猜唯一的方法是在我的Source模型上有一個字段來對其進行計數並可以重置。
伐木是800磅的大猩猩,我不確定該如何處理。 我可以對日志進行標准寫入,但是如果出現故障,我想存儲整個html,以便我找出來。 另外,我需要以某種方式通知自己,以便解決這些問題。 我想到可能只是為此創建一個模型並將其存儲在數據庫中。 如果執行此操作,則可能必須將html存儲在s3上。 我在heroku上運行它,因此影響了我的工作能力。
設置程序開始並救援每個領域的塊。 我試圖找出一種以更好的紅寶石方式編碼的代碼,所以我只是沒有它們的頁面,但是盡管我確實有一些字段只是直接出現在doc.css_at(“#whatever”)那里,需要各種格式或計算的數字,所以我認為嘗試挽救它是有道理的,這樣我就可以記錄出現了什么問題。 另一個選擇是讓異常冒泡並在嘗試創建模型時捕獲它。
無論如何,我確定我什至沒有考慮所有問題,所以這就是為什么我試圖弄清楚其他人如何處理此問題。
我們的團隊做了類似的事情,所以這里有一些想法:
begin ActiveRecord::Base.transaction do ...try to load a data source... end rescue ...error handling... end
在發生某些錯誤時給您自己發送電子郵件/尋呼。 我們使用exception_notifier,但是如果您坐在Heroku上,Exceptional插件似乎也是一個不錯的選擇。 我也聽說有人在跳跳成功了
捕獲狀態對於解決問題非常重要。 GMail對我們來說非常有效。 我們的裝載機實際上分為兩個階段:
第二階段是復雜的階段,如果失敗,開發人員可以簡單地登錄gmail帳戶並輕松檢查失敗的消息。 這個過程有一些限制(每個電子郵件和每個郵箱的存儲限制,兩階段管道等),我們開始這樣做是因為我們沒有其他選擇,但是事實證明,它具有驚人的彈性和便利性。 記住電子郵件是一種廉價/簡便的存儲非關鍵狀態的方法。 我們並不是開始考慮使用這種方式,現在真的很高興我們這樣做。 登錄到GMail比瀏覽日志文件更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.