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

nov*_*ova 31 ruby debugging logging ruby-on-rails sinatra

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

我已经添加了:

puts params.inspect
Run Code Online (Sandbox Code Playgroud)

set :logging, :true
Run Code Online (Sandbox Code Playgroud)

params.inspect如果一切顺利,工作.但是如果在执行控制器之前发生错误,我就没有得到任何关于错误的信息,就像我在Rails中默认情况一样.

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

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

configure do 
  Log = Logger.new("sinatra.log")
  Log.level  = Logger::INFO 
end
Run Code Online (Sandbox Code Playgroud)

其次是:

Log.info "#{@users.inspect}"
Run Code Online (Sandbox Code Playgroud)

Bar*_*cat 20

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

before do
  puts '[Params]'
  p params
end
Run Code Online (Sandbox Code Playgroud)


inc*_*ude 14

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

enable :logging, :dump_errors, :raise_errors
Run Code Online (Sandbox Code Playgroud)

并为您的日志设施:

log = File.new("sinatra.log", "a")
STDOUT.reopen(log)
STDERR.reopen(log)
Run Code Online (Sandbox Code Playgroud)

来自Sinatra手册:

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

  • raise_errors - 允许异常传播到应用程序之外(...):raise_errors默认情况下,对于经典样式应用程序禁用该选项,并且默认情况下为Sinatra :: Base子类启用该选项.

我也用了

puts "something" + myvar.inspect
Run Code Online (Sandbox Code Playgroud)

在我的控制器中间的方法.


asy*_*ric 10

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

为了在Sinatra中使用它,请插入

require 'ruby-debug/debugger' 
Run Code Online (Sandbox Code Playgroud)

你想在哪里调试开始.


Rya*_*yan 8

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

请参阅" 如何与Sinatra一起使用Pry? ".