私は初めての Sinatra アプリケーションを作成しており、Pry を使用して、アプリケーションで行われているいくつかのことを検査/デバッグしたいと考えています。私もPryを使ったことがありませんが、試してみたいと思います。Sinatra アプリケーションで Pry を使い始めるにはどうすればよいですか?
4 に答える
概要
require 'pry'
アプリケーションの上部で使用します。binding.pry
インタラクティブセッションに参加したいときはいつでもコードを呼び出してください。Pryの使用方法については、PryおよびPrywikiでIRBを頭に置くを参照してください。- 特定のインタラクティブセッションが終了したら、「」
exit
またはCtrl-Dを入力します。Sinatraは、中断したところから実行を再開します。
例
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