在我的主要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}"
答案 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中一样。
答案 4 :(得分:4)
为了找到调试sinatra app的最佳方法,我在github上创建了一个repo。最有用的部分是步入方法调试,如下所示。
答案 5 :(得分:3)
我强烈建议使用ruby-debug。一旦你学会了四个或五个基本命令,它就很容易设置和使用。它允许您设置一个断点,您可以在其中检查参数并以交互方式使用它,就像在IRB中一样。
答案 6 :(得分:1)
你有没有想过尝试这样的文章:http://www.gittr.com/index.php/archive/logging-with-sinatra-and-passenger-another-try/
答案 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应用程序中使用它:
将gem添加到您的Gemfile
gem "debugger"
运行
安装gembundle
在您的主要sinatra应用程序文件中,添加
require 'debugger'
现在要进行调试,您只需要添加以下行
debugger
代码中的任何位置。
执行代码并看到debugger
时,代码将停止,您可以检查变量,运行命令(使用eval
)等。
答案 9 :(得分:0)
您可以自由地为Sinatra使用Ruby调试器。主要问题是您需要知道哪个Ruby Gem用于哪个Ruby版本。对于大多数人来说,这意味着Ruby 2.X和byebug。
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为例:
gem install byebug
require 'byebug'
byebug