我正在为我的网站添加一个问题按钮。我的目的是允许用户报告他们在使用网站时遇到的问题。这将是一个可用性问题,因为我已经陷阱并报告实际失败。目前,该按钮只是收集文本响应并在我的XLog中写入一条SQL记录。我可以告诉你那段代码,但对于更大的问题,它几乎没有任何意义。
我真正想做的是尽可能多地收集最后一个请求/响应周期结束时的状态。我计划使用Action Mailer通过电子邮件将此状态发送给我的支持团队。我知道我至少可以收集标准($ ...)全局变量。但是,我想要更多。
到目前为止抓住点击按钮的屏幕截图是非常好的。至少,我想知道URL,所有变量的状态等等。我甚至提出并捕获错误来执行此操作。但是,即使这样也会发生在下一个请求的开始。
我考虑为每个存储状态的控制器操作创建一个after_action。这可能是沉重的,但我不知道我是否有另一种选择。或者,即使这样就足够了,但很可能会这样。
无论如何,我经常发现,当我处理一个特别棘手的问题时,就会有一个宝石。那有宝石吗?或者,有人能告诉我这个纠结的缠绕球的起点吗?谢谢!
答案 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]
第一印象是,它似乎正在做我想要的。但是,我还没有使用它进行大量调试。我可能需要添加更多信息。但是,我想将它保持在我需要了解用户发布报告之前发生的事情的最小量。我可能需要更多或更少......
需要的建议。感谢。