Rails Debugging Tools & Techniques
Development logs
tail -f log/development.log
Production logs (Kamal)
kamal app logs --tail
Filter by severity
grep ERROR log/production.log
Filter by request
grep "Started GET" log/development.log
Start console
rails console
Or production console (Kamal)
kamal app exec 'bin/rails console'
Test models
user = User.find(1) user.valid? # Check validations user.errors.full_messages # See errors
Test queries
User.where(email: "test@example.com").to_sql # See SQL User.includes(:posts).where(posts: { published: true }) # Avoid N+1
Add to any Rails file
def some_method byebug # Execution stops here
... rest of method
end
Byebug commands:
n - next line
s - step into method
c - continue execution
pp variable - pretty print
var local - show local variables
exit - quit debugger
In rails console or code
ActiveRecord::Base.logger = Logger.new(STDOUT)
Now all SQL queries print to console
User.all
=> SELECT "users".* FROM "users"
List all routes
rails routes
Filter routes
rails routes | grep users
Show routes for controller
rails routes -c users
Migration status
rails db:migrate:status
Show schema version
rails db:version
Check pending migrations
rails db:abort_if_pending_migrations
Run one-liner
rails runner "puts User.count"
Run script
rails runner scripts/investigate_users.rb
Production environment
RAILS_ENV=production rails runner "User.pluck(:email)"
Run single test with backtrace
rails test test/models/user_test.rb --verbose
Run with warnings enabled
RUBYOPT=-W rails test
Run with seed for reproducibility
rails test --seed 12345
User Load (0.1ms) SELECT * FROM users WHERE id = 1 Post Load (0.1ms) SELECT * FROM posts WHERE user_id = 1 Post Load (0.1ms) SELECT * FROM posts WHERE user_id = 2 Post Load (0.1ms) SELECT * FROM posts WHERE user_id = 3
Bad
users.each { |user| user.posts.count }
Good
users.includes(:posts).each { |user| user.posts.count }
Check migration status
rails db:migrate:status
Run pending migrations
rails db:migrate
Or rollback and retry
rails db:rollback rails db:migrate
Official Documentation:
-
Rails Guides - Debugging Rails Applications
-
Rails API - ActiveSupport::Logger
-
Ruby Debugging Guide
Gems & Libraries:
-
byebug - Ruby debugger
-
bullet - N+1 query detection
Tools:
- Rack Mini Profiler - Performance profiling