web-dev-qa-db-ja.com

PryをSinatraで使用する方法は?

私は最初のSinatraアプリケーションを作成しており、Pryを使用してアプリケーションで行われているいくつかのことを検査/デバッグしたいと考えています。 Pryも使ったことがないのですが、やってみたいです。 SinatraアプリケーションでPryを使い始めるにはどうすればよいですか?

35
Andrew

概要

  1. アプリケーションの上部でrequire 'pry'を使用します。
  2. インタラクティブセッションに参加したいときはいつでも、コードでbinding.pryを呼び出します。 Pryの使用方法については、 IRBをPryで頭に向ける および Pry wiki を参照してください。
  3. 特定のインタラクティブセッションが終了したら、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 ライブラリを参照してください。

51
Phrogz

アプリケーションを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チートシート

6
lfender6445

私はpry-debuggerが好きです。ただし、クラシックなスタイルでシナトラを実行している間は、こじ開けることができないというトリックがまだあります。

Sinatraアプリをデバッグするための最良の方法を見つけるために、私はgithubで以下のようなリポジトリを作成しました。

enter image description here

リポジトリは次のとおりです: https://github.com/hlee/sinatra_debugger_example

4
Race

私の好みの方法も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を使用してブレークポイントを設定します。 。それは私がそれにドロップするためにコードをまったく変更する必要がないことを意味します。

0
iain