私は最初のSinatraアプリケーションを作成しており、Pryを使用してアプリケーションで行われているいくつかのことを検査/デバッグしたいと考えています。 Pryも使ったことがないのですが、やってみたいです。 SinatraアプリケーションでPryを使い始めるにはどうすればよいですか?
require 'pry'
を使用します。binding.pry
を呼び出します。 Pryの使用方法については、 IRBをPryで頭に向ける および Pry wiki を参照してください。exit
またはCtrl-Dを入力します。シナトラは中断したところから実行を再開します。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}!
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
Webブラウザで http:// localhost:4567 にリクエストを送信すると、コンソールは結果を送信する前にPryデバッガにドロップします。
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
行ベースのブレークポイントの設定、ステップ実行、例外発生時のブレークなど、従来のデバッグコマンドを使用できるようにする場合は、Mon-Ouieの PryDebug ライブラリを参照してください。
アプリケーションをPryセッションにロードします:
あなたのconfig.ru
を見てください。このように見える場合:
require File.join(File.dirname(__FILE__), 'config', 'application.rb')
を使用してアプリケーションをPryにロードできます
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
これは、依存関係が満たされている限り、任意のモジュールまたはクラスで実行できます。
Pryの使用法の高度な例については、これを見てください Pryチートシート 。
私はpry-debuggerが好きです。ただし、クラシックなスタイルでシナトラを実行している間は、こじ開けることができないというトリックがまだあります。
Sinatraアプリをデバッグするための最良の方法を見つけるために、私はgithubで以下のようなリポジトリを作成しました。
リポジトリは次のとおりです: https://github.com/hlee/sinatra_debugger_example
私の好みの方法もPryですが、上記とは少し異なります。プロセスで実行される最初のファイルの1つで、config.ru
またはspec/spec_helper.rb
と言います。
if ENV["DEBUG"]
require 'pry-byebug'
# and any other Pry extensions etc
binding.pry
end
次に、デバッグを使用する場合は、env DEBUG=1 bin/rackup config.ru
またはenv DEBUG=1 bin/rspec
を実行し(RSpecの-e
スイッチでよく使用します)、break
を使用してブレークポイントを設定します。 。それは私がそれにドロップするためにコードをまったく変更する必要がないことを意味します。