2009-09-01 20 views
28

En mi controlador Sinatra principal, quiero depurar el hash de params después de que se haya PUBLICADO desde un formulario.¿Cómo depurar una aplicación Sinatra como una aplicación Rails?

he añadido:

puts params.inspect 

y

set :logging, :true 

Las obras params.inspect si todo va bien. Pero si ocurre un error antes de que se ejecute el controlador, no obtendré ninguna información sobre el error como lo haría en Rails de manera predeterminada.

¿Cuál es la mejor manera de obtener información de depuración útil?

This example no funciona en absoluto (ni siquiera la aplicación comenzaría después de añadir el código):

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

seguido de:

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

¿qué hay de 'aumentar params' – coderek

Respuesta

19

Usted podría intentar agregar un filtro que antes imprime los parámetros

before do 
    puts '[Params]' 
    p params 
end 
+0

tenía que hacer esto en el código sinatra heredado. dentro del archivo erb (o haml) '' '<% p params%>' '' justo encima de cualquier otra cosa escrita en el cuerpo. los params aparecerán en tu consola. –

1

Supongo que ya mencionó su controlador Sinatra principal, tiene más de uno, lo que significa que está subclasando Sinatra :: Base en lugar de utilizar una aplicación clásica (nivel superior) Sinatra. Si este es realmente el caso, una 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 clase, obtendrá páginas de error amigables que incluyen un seguimiento de pila, params, etc., en lugar de solo un error interno del servidor. Otra opción es set :raise_errors, false y luego incluir un bloque error do ... end que se ejecutará cada vez que una de sus rutas genere un error.

3

Recomiendo usar ruby-debug. Es muy fácil de configurar y usar una vez que aprende los cuatro o cinco comandos básicos. Le permitirá establecer un punto de interrupción donde quiera inspeccionar los parámetros y jugar interactivamente con él como lo haría en IRB.

13

Mi opinión es que para la depuración debe usar configure :development do porque algunos indicadores de depuración están activados en este escenario. Por lo tanto, en virtud de su bloque configure do puede activar las banderas:

enable :logging, :dump_errors, :raise_errors 

y por su facilidad de registro:

log = File.new("sinatra.log", "a") 
STDOUT.reopen(log) 
STDERR.reopen(log) 

Desde el manual Sinatra:

  • dump_errors opción controla si la traza se descarga a rack.errors cuando se genera una excepción de una ruta. La opción está habilitada de manera predeterminada para las aplicaciones de nivel superior.

  • raise_errors - permite que las excepciones se propaguen fuera de la aplicación (...) La opción :raise_errors está deshabilitada de forma predeterminada para las aplicaciones de estilo clásico y habilitada de forma predeterminada para las subclases Sinatra :: Base.

También uso el método

puts "something" + myvar.inspect 

en medio de mis reguladores.

10

Como @jshen dice, ruby-debug es una herramienta muy buena.

Con el fin de utilizarlo en Sinatra, inserte

require 'ruby-debug/debugger' 

donde desea depuración para iniciar.

8

Recomiendo el uso del depurador Pry o Ruby. Con Pry, puede usar la línea de comando para recorrer sus métodos y variables como lo haría en bash.

Ver "How to use Pry with Sinatra?".

+0

Este es de lejos el método más útil para depurar aplicaciones de sinatra disponibles. – three

4

Para encontrar la mejor manera de depurar la aplicación Sinatra, creé un repositorio en github. La parte más útil es paso a la depuración del método, que se ve a continuación.

enter image description here

Aquí es el repositorio: https://github.com/hlee/sinatra_debugger_example

1

le recomiendo usar la gema debugger.

Para usar esto con su Sinatra aplicación:

  1. Añadir la gema a su Gemfile

    gem "debugger" 
    
  2. Instalar la gema ejecutando

    bundle 
    
  3. En su Sinatra principal archivo de aplicación, agregue

    require 'debugger' 
    
  4. Ahora depurar, sólo hay que añadir la siguiente línea

    debugger 
    

    cualquier parte del código.

Cuando se ejecuta el código y debugger se ve, el código se detendría y se puede inspeccionar variables, los comandos de marcha (usando eval), etc.

Cuestiones relacionadas