【问题标题】:Rails Exception Notification 500 ErrorsRails 异常通知 500 错误
【发布时间】:2021-06-25 06:08:51
【问题描述】:

我在 Rails 5 上运行异常通知 gem。我在 config/environments/production.rb 中设置了默认方式:

  Rails.application.config.middleware.use ExceptionNotification::Rack,
  email: {
    # deliver_with: :deliver, # Rails >= 4.2.1 do not need this option since it defaults to :deliver_now
    email_prefix: '[MFTA Error Notification] ',
    sender_address: %{"notifier" <almost@got.me>},
    exception_recipients: %w{butnotquite@gmail.com}
  }

当网站启动时,这适用于标准错误...

但是它不应该向我发送一份关于 500 个服务器错误的报告吗?非常随机......大约每月一次左右......rails应用程序会在我身上崩溃,我需要重新部署它才能让它再次工作。但如果没有通知,我什至不会知道该网站已关闭。

那么是否有一些单独的配置...甚至是另一个 Gem...让我知道什么时候发生这种情况?

【问题讨论】:

  • 我会在日志中挖掘,看看发生了什么,要么是 Rails 日志,要么如果它不存在,那么运行你的应用程序的服务器/主机的日志。
  • 这正是我所做的......完全没有错误。 production.log 中的最后一件事是 index.html.erb 的成功渲染。 Puma 错误日志中的最后一件事是:[4120] - Worker 0 (pid: 4122) booted, phase: 0 4120] 工人提前终止。但这可能只是重新启动。显然,该应用程序从 3 月 18 日到我发布此消息之前一直处于关闭状态。我还能去哪里看?
  • 您在哪里运行您的应用程序? (例如 aws、heroku 等)通常他们在某个地方保存机器日志
  • 我正在运行 AWS。只是不知道在哪里看。阿帕奇日志? PHP日志?谁知道...
  • 无论如何...我更关心在网站关闭时收到某种通知。也许我可以训练谷歌分析来做这件事或其他事情。只是希望有一种方式异常通知可以做到这一点。

标签: ruby-on-rails exception-notification


【解决方案1】:

由于您的应用托管在 aws 中,因此您可以在应用中设置运行状况检查端点并使用 lambda 函数定期对其进行 ping 操作。如果没有 200 响应,则很可能您的应用程序已关闭,因为提供健康检查是一件非常简单的事情,不应该失败。

通常人们会设置一个阈值,例如在 Y 持续时间内 X 次连续健康检查失败,以验证应用程序已关闭。但这需要您的 lambda 函数是有状态的。如果您不介意由于部署或服务器重启而导致误报,您可以忘记这一点。

另外,如果您希望健康检查的性能更高,您可以实现机架中间件来拦截此健康检查请求并返回 200 响应。从这个意义上说,请求不必经过所有堆栈,直到它到达 Rails

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 2015-12-05
    • 2017-12-12
    • 2016-12-12
    • 2018-10-31
    • 2010-12-21
    • 2012-08-21
    • 1970-01-01
    相关资源
    最近更新 更多