ruby on rails - tutorial - ¿Cómo depuras una aplicación de Sinatra como una aplicación de Rails?
ruby on rails que es (9)
¿Has pensado en probar algo como este artículo? http://www.gittr.com/index.php/archive/logging-with-sinatra-and-passenger-another-try/
En mi controlador principal de Sinatra, quiero depurar el hash params después de que se publique desde un formulario.
Yo he añadido:
puts params.inspect
y
set :logging, :true
El params.inspect funciona si todo va bien. Pero si ocurre un error antes de que se ejecute el controlador, no obtengo ninguna información sobre el error como lo haría en Rails de forma predeterminada.
¿Cuál es la mejor manera de obtener información útil de depuración?
Este ejemplo no funcionó en absoluto (la aplicación ni siquiera se iniciaría después de agregar este código):
configure do
Log = Logger.new("sinatra.log")
Log.level = Logger::INFO
end
seguido por:
Log.info "#{@users.inspect}"
Como dice @jshen, ruby-debug es una herramienta muy buena.
Para usarlo en Sinatra, inserte
require ''ruby-debug/debugger''
donde te gustaría comenzar la depuración.
Mi opinión es que para la depuración debe usar configure :development do porque en este escenario están activadas algunas marcas de depuración. Por lo tanto, bajo su bloque de configure do puede habilitar los indicadores:
enable :logging, :dump_errors, :raise_errors
y para su instalación de registro:
log = File.new("sinatra.log", "a")
STDOUT.reopen(log)
STDERR.reopen(log)
Del manual de Sinatra:
dump_errorsopcióndump_errorscontrola si el retroceso se vuelca enrack.errorscuando serack.errorsuna excepción desde una ruta. La opción está habilitada de forma predeterminada para las aplicaciones de nivel superior.raise_errors: permite que las excepciones se propaguen fuera de la aplicación (...) La opción:raise_errorsestá deshabilitada de forma predeterminada para aplicaciones de estilo clásico y habilitada de forma predeterminada para las subclases Sinatra :: Base.
Yo tambien uso el
puts "something" + myvar.inspect
Método en medio de mis controladores.
Para encontrar la mejor manera de depurar la aplicación sinatra, creé un repositorio en github. La parte más útil es el paso a la depuración del método, que se ve a continuación.
Aquí está el repositorio: https://github.com/hlee/sinatra_debugger_example
Puedes intentar agregar un filtro anterior que imprima los parámetros
before do
puts ''[Params]''
p params
end
Recomiendo encarecidamente usar ruby-debug. Es muy fácil de configurar y usar una vez que aprenda los cuatro o cinco comandos básicos. Te permitirá establecer un punto de interrupción en el que quieras inspeccionar los parámetros y jugar de forma interactiva con ellos como lo harías en IRB.
Recomiendo usar Pry o el depurador de Ruby. Con Pry, puedes usar la línea de comando para atravesar tus métodos y variables como lo harías en bash.
Consulte " ¿Cómo usar Pry con Sinatra? ".
Recomiendo usar la gema debugger .
Para usar esto con tu aplicación Sinatra:
Agrega la gema a tu Gemfile
gem "debugger"Instala la gema corriendo
bundleEn su archivo principal de la aplicación sinatra, agregue
require ''debugger''Ahora para depurar, solo tienes que agregar la siguiente línea
debuggerEn cualquier parte de tu código.
Cuando se ejecuta el código y se ve el debugger , el código se detiene y puede inspeccionar variables, ejecutar comandos (usando eval ), etc.
Supongo que desde que mencionaste tu controlador principal de Sinatra, tienes más de uno, lo que significa que estás subclasificando Sinatra :: Base en lugar de usar una aplicación clásica (nivel superior) de Sinatra. Si este es el caso, gran parte del manejo de errores predeterminado que realiza Sinatra está deshabilitado de forma predeterminada.
Si incluye set :show_exceptions, true if development? en la definición de clase, obtendrá páginas de error amigables que incluyen un seguimiento de pila, parámetros, etc., en lugar de solo un error interno del servidor. Otra opción es set :raise_errors, false y luego incluir un error do ... end block que se ejecutará cada vez que una de sus rutas genere un error.