¿Cómo depurar una aplicación Sinatra como una aplicación Rails?
En mi controlador principal de Sinatra, quiero depurar el hash de parámetros después de que se publique desde un formulario.
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 estoy recibiendo ninguna información sobre el error como lo haría en Rails por defecto.
¿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 He añadido este código):
configure do
Log = Logger.new("sinatra.log")
Log.level = Logger::INFO
end
Seguido de:
Log.info "#{@users.inspect}"
9 answers
Puede intentar agregar un filtro antes que imprima los parámetros
before do
puts '[Params]'
p params
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-01 21:51:28
Mi opinión es que para depurar debe usar configure :development
do porque algunos indicadores de depuración están activados en este escenario. Por lo tanto, bajo su bloque configure do
puede habilitar las banderas:
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_errors
la opción controla si la traza inversa es volcada arack.errors
cuando se genera una excepción desde una ruta. La opción está habilitada de forma predeterminada para las aplicaciones de nivel superior.raise_errors
- permitir que las excepciones se propaguen fuera de la aplicación (...) La opción:raise_errors
está deshabilitada por defecto para aplicaciones de estilo clásico y habilitada por defecto para subclases Sinatra::Base.
También uso el
puts "something" + myvar.inspect
Método en medio de mis controladores.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-26 21:30:10
Como dice @jshen, ruby-debug es una herramienta muy agradable.
Para usarlo en Sinatra, inserte
require 'ruby-debug/debugger'
Donde desea que comience la depuración.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-26 21:30:42
Recomiendo usar Pry o el depurador Ruby. Con Pry, puede usar la línea de comandos para recorrer sus métodos y variables como lo haría en bash.
Ver " ¿Cómo usar Pry con Sinatra?".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:24
Para encontrar la mejor manera de depurar la aplicación sinatra, creé un repositorio en github. La parte más útil es step into method debug, que se ve a continuación.
Aquí está el repositorio: https://github.com/hlee/sinatra_debugger_example
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-25 21:34:08
Recomiendo encarecidamente usar ruby-debug. Es muy fácil de configurar y usar una vez que aprendes los cuatro o cinco comandos básicos. Le permitirá establecer un punto de interrupción donde desea inspeccionar los parámetros y jugar interactivamente con él como lo haría en IRB.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-26 21:34:45
¿Has pensado en probar algo como este artículo: http://www.gittr.com/index.php/archive/logging-with-sinatra-and-passenger-another-try /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-02 11:53:19
Supongo que ya que mencionaste tu controlador Sinatra principal, tienes más de uno, lo que significa que estás subclasificando Sinatra::Base en lugar de usar una aplicación Sinatra clásica (de nivel superior). Si este es el caso, gran parte del manejo de errores predeterminado que hace Sinatra está deshabilitado por defecto.
Si incluye set :show_exceptions, true if development?
en la definición de la 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 incluya un bloque error do ... end
que se ejecutará cada vez que una de sus rutas genere un error.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-23 23:31:13
Recomiendo usar la gema debugger.
Para usar esto con su aplicación Sinatra:
-
Añade la gema a tu Gemfile
gem "debugger"
-
Instale la gema ejecutando
bundle
-
En su archivo principal de la aplicación sinatra, agregue
require 'debugger'
-
Ahora para depurar, solo tiene que agregar la siguiente línea
debugger
En cualquier lugar de su código.
Cuando se ejecuta el código y se ve debugger
, el código se detendrá y puede inspeccionar variables, ejecutar comandos (usando eval
), etc.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-26 21:38:49