31

在我的主 Sinatra 控制器中,我想在从表单发布参数哈希后对其进行调试。

我已经添加了:

puts params.inspect

set :logging, :true

params.inspect如果一切顺利,就可以了。但是,如果在控制器执行之前发生错误,我不会像默认情况下在 Rails 中那样获得有关错误的任何信息。

获得有用的调试信息的最佳方式是什么?

此示例根本不起作用(添加此代码后应用程序甚至无法启动):

configure do 
  Log = Logger.new("sinatra.log")
  Log.level  = Logger::INFO 
end

其次是:

Log.info "#{@users.inspect}"
4

10 回答 10

20

您可以尝试添加一个打印出参数的 before 过滤器

before do
  puts '[Params]'
  p params
end
于 2009-09-01T21:51:28.987 回答
15

我的观点是,对于调试,您应该使用 configure :developmentdo,因为在这种情况下打开了一些调试标志。因此,在您的configure do块下,您可以启用标志:

enable :logging, :dump_errors, :raise_errors

并为您的日志记录设施:

log = File.new("sinatra.log", "a")
STDOUT.reopen(log)
STDERR.reopen(log)

来自 Sinatra 手册:

  • dump_errors选项控制是否在rack.errors从路由引发异常时转储回溯。该选项默认为顶级应用启用。

  • raise_errors - 允许异常传播到应用程序之外(...)该:raise_errors选项默认为经典风格的应用程序禁用,默认为 Sinatra::Base 子类启用。

我也使用

puts "something" + myvar.inspect

我的控制器中间的方法。

于 2010-02-24T00:29:39.320 回答
10

正如@jshen 所说,ruby-debug 是一个非常好的工具——如果您使用的是 Ruby 1.8。

为了在 Sinatra 中使用它,插入

require 'ruby-debug/debugger' 

您希望从哪里开始调试。

于 2010-06-22T22:35:14.357 回答
8

我推荐使用 Pry 或 Ruby 调试器。使用 Pry,您可以使用命令行来遍历您的方法和变量,就像在 bash 中一样。

请参阅“如何将 Pry 与 Sinatra 一起使用? ”。

于 2011-12-08T11:11:37.903 回答
4

为了找到调试 sinatra 应用程序的最佳方法,我在 github 创建了一个 repo。最有用的部分是进入方法调试,如下所示。

在此处输入图像描述

这是回购:https ://github.com/hlee/sinatra_debugger_example

于 2013-05-25T21:34:08.450 回答
3

我强烈建议对 Ruby 1.8 使用 ruby​​-debug。一旦你学会了四五个基本命令,它就很容易设置和使用。它将允许您在要检查参数的位置设置断点并像在 IRB 中那样交互式地使用它。

于 2010-02-23T23:45:46.223 回答
2

Sinatra 中的 Ruby 调试器

您可以自由地为 Sinatra 使用 Ruby 调试器。主要问题是您需要知道哪个 Ruby Gem 用于哪个 Ruby 版本。现在对大多数人来说,这意味着 Ruby 2.X 和byebug

Ruby 版本的 Ruby 调试器

 Ruby Version   Gem Install      require                add breakpoint
 ---------------------------------------------------------------------
 1.8.X          ruby-debug      'ruby-debug/debugger'   debugger
 1.9.X          debugger        'debugger'              debugger
 2.0.0+         byebug          'byebug'                byebug

一旦您知道必须安装 gem,在代码中要求它,然后通过键入关键字添加断点。以 byebug 为例:

  1. 安装:gem install byebug
  2. 要求:require 'byebug'
  3. 断点:byebug

延伸阅读

Byebug 项目

使用终端调试器的 Byebug 指南

于 2019-07-28T16:31:44.923 回答
1

你有没有想过尝试类似这篇文章:http ://www.gittr.com/index.php/archive/logging-with-sinatra-and-passenger-another-try/

于 2009-09-02T11:53:19.237 回答
1

我猜因为您提到了您的主要 Sinatra 控制器,所以您有多个,这意味着您正在继承 Sinatra::Base 而不是使用经典(顶级)Sinatra 应用程序。如果确实如此,那么 Sinatra 所做的许多默认错误处理都默认禁用。

如果您包含set :show_exceptions, true if development?在类定义中,您将获得包含堆栈跟踪、参数等的友好错误页面,而不仅仅是内部服务器错误。另一种选择是set :raise_errors, false然后包含一个error do ... end块,该块将在您的一条路线引发错误时运行。

于 2010-02-23T23:31:13.470 回答
1

我建议使用 Ruby 1.9 的调试器gem。

要将它与您的 Sinatra 应用程序一起使用:

  1. 将 gem 添加到您的 Gemfile

    gem "debugger"
    
  2. 通过运行安装 gem

    bundle
    
  3. 在您的主 sinatra 应用程序文件中,添加

    require 'debugger'
    
  4. 现在要调试,您只需添加以下行

    debugger
    

    代码中的任何位置。

当代码正在执行并被debugger看到时,代码将停止,您可以检查变量、运行命令(使用eval)等。

于 2013-11-08T12:08:00.847 回答