创建 "issue" 按钮以在上一个 request/response 周期结束时报告状态

Creating "issue" button to report state at end of last request/response cycle

我正在向我的网站添加一个问题按钮。我的目的是让用户报告他们在使用该网站时遇到的问题。这将是一个可用性问题,因为我已经捕获并报告了实际故障。目前,该按钮仅收集文本响应并在我的 XLog 中写入一条 SQL 记录。我可以向您展示该代码,但就更大的问题而言,它几乎没有任何意义。

我真正想做的是尽可能多地收集上一个 request/response 周期结束时的当前状态。我计划使用 Action Mailer 将此状态通过电子邮件发送给我的支持团队。我知道我至少可以收集标准的 ($...) 全局变量。然而,我想要的不止于此。

最好能抓取单击按钮的屏幕截图。至少,我想知道 URL、所有变量的状态等。我什至会引发并捕获错误来执行此操作。但是,即使那样也会在下一个请求开始时发生。

我考虑过为每个存储状态的控制器操作创建一个 after_action。这可能是严厉的,但我不知道我是否还有其他选择。或者,如果这就足够了,但它可能会。

无论如何,我经常发现当我处理一个特别困难的问题时,有一个gem。有 gem 吗?或者,有人可以告诉我这个缠结的麻线球的起点吗?谢谢!

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

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

  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]

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

需要建议。谢谢