【问题标题】:Resque: Exceptions & stack tracesResque:异常和堆栈跟踪
【发布时间】:2014-10-03 16:58:56
【问题描述】:

我有一个 JRuby/Rails 应用程序,它包含一个用于处理 HTTP 请求的 Web 服务器、一个 MySQL 数据库和一个用于处理排队作业的 Resque worker。当我处于开发模式并且 Web 应用程序中的某些内容引发异常时,我在浏览器中得到了很好的跟踪,显示了引发的异常、引发异常的行、相关数据和堆栈回溯。

但是,当抛出异常的代码在 Resque 工作程序中执行时,我什么也得不到,即使我知道代码抛出了异常。我可以调试的唯一方法是抛出打印语句并找出在 Resque 工作人员抛出异常并崩溃之前调用最后一个打印语句的位置。

有没有办法让 Resque 工作人员吐出一个异常日志并将堆栈回溯到日志文件中(在它崩溃之前),这样我就可以看到发生了什么?

编辑-(感谢@Viren 的想法)-我不想在我的应用程序代码中乱扔开始/救援块。我将把开始/救援代码放在某个地方,以确保记录异常回溯,但我不知道把它放在哪里。

【问题讨论】:

  • 为什么不为 Resque 添加单独的记录器并使用begin rescue 块捕获错误希望有所帮助
  • 我不想在代码中乱扔寻找异常的开始/救援块。是否有一个中心位置,我可以将其放入一次并覆盖整个区域?
  • 据我所知,你应该有一个失败的工作,也应该有一个有效的堆栈跟踪。你确定这与 jruby 无关吗?

标签: ruby-on-rails-3 debugging resque jrubyonrails


【解决方案1】:

您可以将 Resque 记录器设置为使用 Rails 记录器。对于完整的堆栈跟踪,您可能希望将其设置为 DEBUG 级别,这会打印出大量信息。你把它放在initializers/resque.rb:

Resque.logger = Rails.logger
Resque.logger.level = Logger::DEBUG

还有resque-backtrace gem,虽然它的缺点是它会覆盖 Resque 中的后端,所以现在没有作业会进入错误队列。

【讨论】:

    猜你喜欢
    • 2011-01-05
    • 2017-08-06
    • 2010-09-13
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多