你如何像Rails应用程序一样调试Sinatra应用程序?

时间:2009-09-01 21:34:04

标签: ruby-on-rails ruby debugging logging sinatra

在我的主要Sinatra控制器中,我想在从表单发布后调试params哈希。

我已添加:

puts params.inspect

set :logging, :true

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

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

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

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

接下来是:

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

10 个答案:

答案 0 :(得分:20)

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

before do
  puts '[Params]'
  p params
end

答案 1 :(得分:14)

我的意见是,对于调试,您应该使用configure :development,因为在这种情况下会打开一些调试标志。因此,在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

控制器中间的方法。

答案 2 :(得分:10)

正如@jshen所说,ruby-debug是一个非常好的工具。

要在Sinatra中使用它,请插入

require 'ruby-debug/debugger' 

你想要调试开始。

答案 3 :(得分:8)

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

请参阅“How to use Pry with Sinatra?”。

答案 4 :(得分:4)

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

enter image description here

以下是回购:https://github.com/hlee/sinatra_debugger_example

答案 5 :(得分:3)

我强烈建议使用ruby-debug。一旦你学会了四个或五个基本命令,它就很容易设置和使用。它允许您设置一个断点,您可以在其中检查参数并以交互方式使用它,就像在IRB中一样。

答案 6 :(得分:1)

答案 7 :(得分:1)

我猜是因为你提到了你的主要Sinatra控制器,你有多个,这意味着你是继承Sinatra :: Base而不是使用经典(顶级)Sinatra应用程序。如果确实如此,默认情况下会禁用Sinatra执行的大量默认错误处理。

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

答案 8 :(得分:1)

我建议使用debugger gem。

要在Sinatra应用程序中使用它:

  1. 将gem添加到您的Gemfile

    gem "debugger"
    
  2. 运行

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

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

    debugger
    

    代码中的任何位置。

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

答案 9 :(得分:0)

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 project

Byebug guide to use a terminal debugger