patrick
patrick

Reputation: 9742

binding.pry is often ignored since upgrading to ruby 3.3 + rails 7

I am currently in the process of upgrading my rails 6 app to 7, and when I've run into issues, I have been trying to debug, and keep running into this weird issue where binding.pry does not seem to be stopping execution... For example, I have an active model validation callback which calls a dynamically defined method:

   29     define_method "#{subclass}_include?" do |id|
   30       binding.pry
   31       puts "pry should have been called"
   32       find_by_id(subclass, id).present?
   33     end

And I am trying to trigger this from an rspec spec file:

[1] pry(#<RSpec::ExampleGroups::Share::WhenShareTemplateIdIsNotAValidShareTemplate>)> subject.valid?
pry should have been called
pry should have been called
pry should have been called
NoMethodError: undefined method `find' for "translation missing: en.foo.bar":String

The binding.pry command is getting completely ignored...

*** UPDATE ***

It happened again.. I have an ActiveJob spec which is doing:

after_perform :enqueue_next_job

...

def enqueue_next_job
  self.class.set(:wait_until => 30.seconds.from_now).perform_later
end

running this spec, I see:

     SystemStackError:
       stack level too deep
     # ./app/jobs/my_job.rb:20:in `enqueue_next_job'
     # ./app/jobs/my_job.rb:20:in `enqueue_next_job'
     # ./app/jobs/my_job.rb:20:in `enqueue_next_job'
     # ./app/jobs/my_job.rb:20:in `enqueue_next_job'
     # ..etc (forever)

So I put a pry in my enqueue_next_job:

[1] pry(#<MyJob>)> job = self.class.set(:wait_until => 30.seconds.from_now)
=> #<ActiveJob::ConfiguredJob:0x000000012ff33128 @job_class=MyJob, @options={:wait_until=>Wed, 21 Aug 2024 23:15:51.479173000 UTC +00:00}>
[2] pry(#<MyJob>)> edit job.perform_later

added to the perform_later code:

 14     def perform_later(...)
 15       binding.pry
 16       puts "binding.pry should be happening"
 17       @job_class.new(...).enqueue @options
 18     end

exited, and called perform_later on the job and I get:

[3] pry(#<BulkIndexAssetItemsJob>)> job.perform_later
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
binding.pry should be happening
SystemStackError: stack level too deep

Upvotes: 0

Views: 67

Answers (0)

Related Questions