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?
require 'pry'
en haut de votre application.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 .exit
ou Ctrl-D; Sinatra recommencera à courir là où il s'est arrêté.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
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.
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.
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.
Voici le repo: https://github.com/hlee/sinatra_debugger_example
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.