pry-rescue の使い方
エラーがキャッチされなかった場合に Pry を起動する。pry-stack_explorer
を入れるとスタックの表示やスタックフレーム内での移動ができる。
group :development, :test do gem "pry" gem "pry-rescue" gem "pry-stack_explorer" end
参考:
ConradIrwin/pry-rescue: Start a pry session whenever something goes wrong – GitHub
pry/pry-stack_explorer: Walk the stack in a Pry session – GitHub
RSpec で使う
spec_helper.rb
で "pry-rescue/rspec"
を require
する。
require "pry-rescue/rspec"
テストを実行する。
$ rake spec
環境変数で RESCUE
の値を定義したときのみ Pry を起動するように設定する。
require "pry-rescue/rspec" if ENV.key?("RESCUE")
RESCUE=1
を指定して rake spec
を実行する。
$ RESCUE=1 rake spec
参考:
RSpec – ConradIrwin/pry-rescue – GitHub
Minitest で使う
アサーションの失敗時に自動的に Pry が起動するので、minitest-byebug
は不要。
test_helper.rb
で "pry-rescue/minitest"
を require
する。
require "pry-rescue/minitest"
テストを実行する。
$ rails test
環境変数で RESCUE
の値を定義したときのみ Pry を起動するように設定する。
require "pry-rescue/minitest" if ENV.key?("RESCUE")
RESCUE=1
を指定して rails test
を実行する。
$ RESCUE=1 rails test
参考:
Minitest – ConradIrwin/pry-rescue – GitHub
rails server で使う
$ rescue rails server
参考:
Rails – ConradIrwin/pry-rescue: Start a pry session whenever something goes wrong – GitHub
How do I use pry-rescue in Rails? · Issue #4 · ConradIrwin/pry-rescue – GitHub
rails console で使う
> Pry::rescue { raise "Rescue me!!" }
参考:
Automatically prying uncaught Rails console errors? · Issue #64 · ConradIrwin/pry-rescue – GitHub
Rake タスクで使う
task :debug_task do Pry.rescue { raise "Error! Rescue me from here..." } end
rescue
コマンドを使って、rails
コマンドではなく rake
コマンドを呼び出すことでタスクの例外発生時に Pry を起動できる。(pry-rescue 1.5.0 以降)
$ rescue rake assets:precompile
参考:
pry rescue exit program immediately when error occurs · Issue #74 · ConradIrwin/pry-rescue – GitHub
Merge pull request #108 from abaldwin88/master · ConradIrwin/pry-rescue@1e77c7c – GitHub
Use pry-rescue In a rake Task? – Stack Overflow
cd-cause
例外の発生場所へ移動する。発生箇所が rescue ブロック内の場合、再度コマンドを実行するとオリジナルの例外発生箇所へ移動する。
> cd-cause
cd-cause
コマンド実行前の位置に戻る。
> cd ..
参考:
cd-cause – ConradIrwin/pry-rescue – GitHub
try-again
編集したコードを再実行する。Rails あるいは Rack アプリケーションの場合は、同じリクエストが再度実行される。MiniTest あるいは RSpec の場合は、現在のテストが再実行される。Pry.rescue
ブロックを使用している場合はブロックが再実行される。
参考:
try-again – ConradIrwin/pry-rescue – GitHub
pry-stack_explorer
スタックフレームを表示する。
> show-stack
指定したフレームに移動する。
> frame 6
上のフレームに移動する。
> up
下のフレームに移動する。
> down
show-stack
コマンドのエイリアスを設定する。(~/.pryrc
ファイルに以下の内容を記述する。)
if defined?(PryStackExplorer) Pry.commands.alias_command "@@", "show-stack" end
エイリアス @@
でスタックフレームを表示する。
> @@
参考:
pry/pry-stack_explorer: Walk the stack in a Pry session – GitHub
pry/pry-stack_explorer Wiki – GitHub
Cucumber
参考:
Using pry-rescue to debug exceptions in Cucumber steps – Stack Overflow
Tried to inspect exception outside ワーニング
rescue
の外部で raise
された例外をキャッチした場合に警告が出る。
WARNING: Tried to inspect exception outside of Pry::rescue{ }
コメント:
We used to raise an exception at this point, but that turned out to not be very helpful as it obscured the original cause of the problem. I considered adding an explicit ‘raise e’ here, but decided against it on the grounds that the Pry::rescued call is normally in someone else’s error handler already.
翻訳:
嘗てはこの時点で例外を発生させていました。しかし、元の例外の発生要因がはっきりしないため、あまり役に立たないことがわかりました。明示的に元の例外
e
を再発生させることも検討しましたが、Pry::rescue
でラップされた呼び出しは通常、既に他のエラーハンドラの内部にあることがほとんどであるため、その案は却下されました。
警告とスタックトレースのみが表示される。
詳細な解析をするためには、rescued
メソッドを改変して e.message
を表示するか、raise e
で例外を再発生させて外側の例外ハンドラで処理することもできる。
参考:
warn – pry-rescue/core_ext.rb at v1.5.0 · ConradIrwin/pry-rescue – GitHub