【Rails】gemの中のコードに対してbinding.pryを仕込んでデバッグ
gemの中にbinding.pryを書いても、rails consoleの中でコードを実行するとbinding.pryは反応しない(ブレークポイントで止まってくれない) Rake Taskとして実行することでちゃんと止まってくれるようになるので、以下やり方を備忘録的にメモ
まずはpryするためにGemfileに以下を追加
group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'pry-rails' gem 'pry-byebug' gem 'pry-doc' end
binding.pryを、ブレークポイントを仕込みたいファイルに記述(例としてsettinglogic.rbを記載しています)
# A simple settings solution using a YAML file. See README for more information. class Settingslogic < Hash class MissingSetting < StandardError; end ...(中略) def method_missing(name, *args, &block) binding.pry #ブレークポイント instance.send(name, *args, &block) end ...
lib/task配下にrakeファイルを以下のように作成し、ブレークポイントを設置したコード部分を呼び出すタスクを書く
namespace :main do desc "settinglogic" task :task => :environment do result = Settings.cool p result end end
あとは bundle exec rake main:
をすれば目当てのブレークポイントで止まる。
$ bundle exec rake main:task From: /Users/user/development/code_reading/vendor/bundle/ruby/2.6.0/gems/settingslogic-2.0.9/lib/settingslogic.rb:67 Settingslogic.method_missing: 65: def method_missing(name, *args, &block) 66: binding.pry => 67: instance.send(name, *args, &block) 68: end
おわり