web-dev-qa-db-fra.com

Comment utiliser Pry avec Sinatra?

J'écris ma première application Sinatra et j'aimerais utiliser Pry pour inspecter/déboguer certaines choses qui se passent dans l'application. Je n'ai pas utilisé Pry auparavant non plus, mais j'aimerais bien l'essayer. Comment pourrais-je commencer à utiliser Pry avec mon application Sinatra?

34
Andrew

Résumé

  1. Utilisez require 'pry' en haut de votre application.
  2. Appelez binding.pry dans votre code chaque fois que vous souhaitez accéder à la session interactive. Pour plus d’informations sur l’utilisation de Pry, voir Retourner l’IRB avec Pry et le Pry wiki .
  3. Lorsque vous avez terminé avec une session interactive particulière, tapez exit ou Ctrl-D; Sinatra recommencera à courir là où il s'est arrêté.

Exemple

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}!

Voici à quoi ça ressemble quand je démarre le serveur 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

Lorsque je fais une demande dans un navigateur Web à http: // localhost: 4567 la console accède au débogueur Pry avant d’envoyer le résultat:

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

Débogage ultérieur

Si vous souhaitez pouvoir utiliser les commandes de débogage traditionnelles, telles que la définition de points d'arrêt basés sur une ligne, le pas à pas ou la rupture lorsque des exceptions sont déclenchées, voir PryDebug library de Mon-Ouie.

50
Phrogz

Charge l'application dans une session Pry:

Regardez votre config.ru. Si cela ressemble à quelque chose comme ça:

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

vous pouvez charger votre application dans Pry en utilisant

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

Cela peut être fait avec n'importe quel module ou classe tant que les dépendances sont respectées.

Regardez cette page Aide-mémoire Pry pour des exemples avancés d’utilisation de Pry.

6
lfender6445

Je préfère pry-debugger. Cependant, il y a toujours un truc, c'est que vous ne pouvez pas faire levier pendant que vous exécutez une sinatra sous un style classique.

Afin de trouver le meilleur moyen de déboguer l'application Sinatra, j'ai créé un dépôt chez github, qui se présente ci-dessous.

enter image description here

Voici le repo: https://github.com/hlee/sinatra_debugger_example

4
Race

Ma méthode préférée est aussi Pry, mais un peu différente de la précédente. Dans l'un des premiers fichiers à exécuter dans un processus, dites le config.ru ou le spec/spec_helper.rb:

if ENV["DEBUG"]
  require 'pry-byebug'
  # and any other Pry extensions etc
  binding.pry
end

Ensuite, si je veux utiliser le débogage, je lance env DEBUG=1 bin/rackup config.ru ou env DEBUG=1 bin/rspec (je l’utilise beaucoup avec le commutateur -e dans RSpec), puis je définis des points de rupture à l’aide de break. Cela signifie que je n'ai pas du tout besoin de changer le code pour y entrer.

0
iain