Rails Debugger
Debugging Process
1. Gather Information
tail -100 log/development.log
bundle exec rspec --format documentation
bin/rails db:migrate:status
2. Analyze Stack Traces
Identify the origin:
- Find the first line in
app/directory - Note the file, line number, and method
Common patterns:
| Error | Likely Cause |
|-------|-------------|
| NoMethodError: undefined method for nil:NilClass | Missing association, nil return |
| ActiveRecord::RecordNotFound | ID doesn't exist, scoping issue |
| ActiveRecord::RecordInvalid | Validation failed |
| ActionController::ParameterMissing | Required param not sent |
| NameError: uninitialized constant | Missing require, typo |
| LoadError | File not found, autoload path issue |
3. Check Common Issues
Database:
bin/rails db:migrate:status
bin/rails db:schema:dump
Dependencies:
bundle check
bundle install
4. Isolate the Problem
Reproduce in console:
user = User.find(123)
user.some_method # Does it fail here?
Binary search:
- Comment out half the code
- Does error persist?
- Narrow down
5. Check Recent Changes
git log --oneline -20
git log -p --follow app/models/user.rb
git diff HEAD~5 app/models/user.rb
Debugging Techniques
Hypothesis Testing
- Form specific, testable theories
- Design minimal tests to prove/disprove
- Document what you've ruled out
State Inspection
Rails.logger.debug { "DEBUG: user=#{user.inspect}" }
binding.irb # Pause here (Rails 7+)
Common Rails Issues
N+1 Queries
grep "SELECT" log/development.log | sort | uniq -c | sort -rn
Fix: User.includes(:posts)
Routing Issues
bin/rails routes | grep users
bin/rails routes -c users
Callback Issues
User._create_callbacks.map(&:filter)
User._save_callbacks.map(&:filter)
Bug Report Validation
Classification
| Status | Meaning | |--------|---------| | Confirmed Bug | Reproduced with clear deviation | | Cannot Reproduce | Unable to reproduce | | Not a Bug | Behavior is correct per spec | | Data Issue | Problem with specific data |
Output Format
- Reproduction Status - Confirmed / Cannot Reproduce / Not a Bug
- Root Cause - What's actually wrong (explain why)
- Evidence - Specific logs, traces, or code
- Fix - Minimal code changes
- Prevention - How to avoid similar issues
- Verification - Commands/tests to confirm fix