簡體   English   中英

在Rails應用程序中保存/更新一次性時間戳的正確方法

[英]Proper way to save/update a one-off timestamp in Rails app

Rails的新手,正在尋找“正確”的方法來做似乎直截了當的事情,但是我所讀到的東西聽起來都不是正確的。

我在Heroku上有一個Rails應用程序,並且已將呼叫添加到依賴於外部系統的端點上。 如果調用失敗,則需要進行一些后續操作,因此我將詳細信息保存到錯誤日志中。 我已經添加了一封通知電子郵件(在這類事情的閑置空間中),以提示我檢查日志並進行后續跟蹤。

萬一端點陷入困境並反復失敗,我希望能夠限制閑置警報,這樣我就不會向所有人發送垃圾郵件(例如,如果自上次發出警報以來已經過了30分鍾,則僅向閑置空間發送電子郵件) 。

為此,我想我需要:

  • 為錯誤的最后一封電子郵件通知保存時間戳的位置
  • 每當發生錯誤時,請與該時間戳記進行比較,如果30分鍾的窗口已過去,則僅與電子郵件空閑空間進行比較。 然后使用新值更新時間戳。

保存這種時間戳值的合適位置是什么? 我讀過全局變量是魔鬼(在這種情況下實際上是行不通的),但是對於我什至不知道的內部某些東西,其他選項(添加數據庫字段,嘗試simpleconfig gem)似乎過多/不正確將發生一次,更不用說頻繁了。

有沒有輕巧的方法可以完成這項工作?

流行的選擇是將其存儲在Redis存儲中-特別是如果您已經為其他內容(例如緩存)設置了它。 由於這本身就是臨時數據,因此您甚至可以使用Rails.cache API提取細節,並讓此代碼信任它們存儲在某個地方

失敗的話,最直接的解決方案可能是創建一個小的單行表並將其存儲在其中:這是過大的,但是不涉及任何異常操作,或者在Rails應用程序中間看起來不合適。

不過,作為一種快速而簡單的解決方案,全局變量並不是沒有問題的:它具有強大的局限性,例如它不會在多個服務器進程之間共享,並且在進程重啟時都會消失。 。但是,如果這些加起來會給您帶來很大的風險,例如您在30分鍾的錯誤時間內會收到4到6條通知,那么這是否足夠好? (它還會免費為您提供“部署時重置”功能,因此在您認為已解決問題之后,您會立即知道問題是否仍在發生。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM