¿Cómo usar Pry con Sinatra?


Estoy escribiendo mi primera aplicación Sinatra y me gustaría usar Pry para inspeccionar/depurar algunas cosas que están sucediendo en la aplicación. Tampoco he usado Pry antes, pero me gustaría probarlo. ¿Cómo empezaría a usar Pry con mi aplicación Sinatra?

Author: Andrew, 2011-08-24

3 answers

Resumen

  1. Use require 'pry' en la parte superior de su aplicación.
  2. Llame a binding.pry en su código cada vez que desee ingresar a la sesión interactiva. Para obtener información sobre el uso de Pry, ver Girando IRB en su cabeza con Pryy el Pry wiki.
  3. Cuando haya terminado con una sesión interactiva en particular, escriba exit o Ctrl-D; Sinatra reanudará la ejecución donde la dejó.

Ejemplo

require 'sinatra'
require 'pry'

get '/' do
  @cats = rand(100)
  html = haml :index
  binding.pry
  html
end

__END__
@@index
%html
  <head><title>Hello World</title></head>
  %body
    %p I have #{@cats} cat#{:s unless @cats==1}!

Esto es lo que parece cuando empiezo el servidor web:

C:\>ruby pry_into_sinatra.rb
== Sinatra/1.2.6 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.2.11 codename Bat-Shit Crazy)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop

Cuando hago una solicitud en un navegador web a http://localhost:4567 la consola cae en el depurador Pry antes de enviar el resultado:

From: pry_into_sinatra.rb @ line 7 in Sinatra::Application#HEAD /:

     2: require 'pry'
     3:
     4: get '/' do
     5:         @cats = rand(100)
     6:         html = haml :index
 =>  7:         binding.pry
     8:         html
     9: end
    10:
    11: __END__
    12: @@index
pry(#<Sinatra::Application:0x3300ac8>)> @cats
=> 42
pry(#<Sinatra::Application:0x3300ac8>)> puts html
<html>
  <head><title>Hello World</title></head>
  <body>
    <p>I have 42 cats!</p>
  </body>
</html>
=> nil
pry(#<Sinatra::Application:0x3300ac8>)> exit
127.0.0.1 - - [24/Aug/2011 13:25:57] "GET / HTTP/1.1" 200 96 28.5390
127.0.0.1 - - [24/Aug/2011 13:25:57] "GET /favicon.ico HTTP/1.1" 404 447 0.0010

Depuración adicional

Si desea poder usar comandos de depuración tradicionales, como establecer puntos de interrupción basados en líneas, o escalonar o romper cuando se generan excepciones, consulte la biblioteca PryDebug de Mon-Ouie.

 50
Author: Phrogz,
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
2011-08-25 15:12:52

Cargar la aplicación en una sesión de Pry:

Echa un vistazo a tu config.ru. Si se ve algo como esto:

require File.join(File.dirname(__FILE__), 'config', 'application.rb')

Puede cargar su aplicación en Pry usando

bundle exec pry -I . -r config/application.rb
# where -I . adds current dir to load path
# and -r is the file you want to require

Esto se puede hacer con cualquier módulo o clase siempre que se cumplan las dependencias.

Mira esta hoja de trucos Pry para ver ejemplos avanzados de uso de Pry.

 5
Author: lfender6445,
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-03-26 22:20:59

Prefiero pry-debugger. Sin embargo, todavía hay truco, que no se puede entrometerse mientras se ejecuta sinatra bajo el estilo clásico.

Para encontrar la mejor manera de depurar la aplicación sinatra, creé un repositorio en github, que se ve a continuación.

introduzca la descripción de la imagen aquí

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

 4
Author: Race,
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:38:50