创建“问题”按钮以在上一个请求/响应周期结束时报告状态

时间:2015-07-02 12:56:47

标签: ruby-on-rails postgresql logging error-handling gem

我正在为我的网站添加一个问题按钮。我的目的是允许用户报告他们在使用网站时遇到的问题。这将是一个可用性问题,因为我已经陷阱并报告实际失败。目前,该按钮只是收集文本响应并在我的XLog中写入一条SQL记录。我可以告诉你那段代码,但对于更大的问题,它几乎没有任何意义。

我真正想做的是尽可能多地收集最后一个请求/响应周期结束时的状态。我计划使用Action Mailer通过电子邮件将此状态发送给我的支持团队。我知道我至少可以收集标准($ ...)全局变量。但是,我想要更多。

到目前为止抓住点击按钮的屏幕截图是非常好的。至少,我想知道URL,所有变量的状态等等。我甚至提出并捕获错误来执行此操作。但是,即使这样也会发生在下一个请求的开始。

我考虑为每个存储状态的控制器操作创建一个after_action。这可能是沉重的,但我不知道我是否有另一种选择。或者,即使这样就足够了,但很可能会这样。

无论如何,我经常发现,当我处理一个特别棘手的问题时,就会有一个宝石。那有宝石吗?或者,有人能告诉我这个纠结的缠绕球的起点吗?谢谢!

1 个答案:

答案 0 :(得分:1)

听到没有回应后,我决定尝试一下,看看会发生什么。它给了我一些基本信息。我很乐意听到任何建议。

在我的应用程序控制器中,我有:

  before_action :gather_response
  after_action  :gather_request
  helper_method :gather_request
  helper_method :gather_response

...

private 

  def gather_request
    session[:kac_debug] = Hash.new if session[:kac_debug].blank?
    session[:kac_debug][:request_trace] = Array.new if session[:kac_debug][:request_trace].blank?
    session[:kac_debug][:request_request] = request.env['HTTP_REFERER']
    session[:kac_debug][:request_trace] =
        session[:kac_debug][:request_trace].unshift("#{request["controller"]}, #{request["action"]}").take(12)
    true
  end

  def gather_response
    session[:kac_debug] = Hash.new if session[:kac_debug].blank?
    session[:kac_debug][:response_request] = response.request.env['HTTP_REFERER']
    session[:kac_debug][:response_status]  = response.status
    true
  end

在我收集并报告信息的控制器中,我想确保信息不会被覆盖,所以我有:

  before_action :gather_response, except: [:new, :create]
  after_action :gather_request, except: [:new, :create]

第一印象是,它似乎正在做我想要的。但是,我还没有使用它进行大量调试。我可能需要添加更多信息。但是,我想将它保持在我需要了解用户发布报告之前发生的事情的最小量。我可能需要更多或更少......

需要的建议。感谢。