rails-debugger

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Rails Debugger

Rails 调试工具

Debugging Process

调试流程

1. Gather Information

1. 收集信息

bash
tail -100 log/development.log
bundle exec rspec --format documentation
bin/rails db:migrate:status
bash
tail -100 log/development.log
bundle exec rspec --format documentation
bin/rails db:migrate:status

2. Analyze Stack Traces

2. 分析堆栈跟踪

Identify the origin:
  • Find the first line in
    app/
    directory
  • Note the file, line number, and method
Common patterns:
ErrorLikely 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
定位问题来源:
  • 找到
    app/
    目录中的第一行报错信息
  • 记录文件、行号和方法
常见错误模式:
错误可能原因
NoMethodError: undefined method for nil:NilClass
关联缺失,返回nil
ActiveRecord::RecordNotFound
ID不存在,作用域问题
ActiveRecord::RecordInvalid
验证失败
ActionController::ParameterMissing
缺少必填参数
NameError: uninitialized constant
缺少引用,拼写错误
LoadError
文件未找到,自动加载路径问题

3. Check Common Issues

3. 检查常见问题

Database:
bash
bin/rails db:migrate:status
bin/rails db:schema:dump
Dependencies:
bash
bundle check
bundle install
数据库相关:
bash
bin/rails db:migrate:status
bin/rails db:schema:dump
依赖相关:
bash
bundle check
bundle install

4. Isolate the Problem

4. 隔离问题

Reproduce in console:
ruby
user = User.find(123)
user.some_method  # Does it fail here?
Binary search:
  • Comment out half the code
  • Does error persist?
  • Narrow down
在控制台中复现:
ruby
user = User.find(123)
user.some_method  # 此处是否会报错?
二分排查法:
  • 注释掉一半代码
  • 错误是否仍然存在?
  • 逐步缩小范围

5. Check Recent Changes

5. 检查近期变更

bash
git log --oneline -20
git log -p --follow app/models/user.rb
git diff HEAD~5 app/models/user.rb
bash
git log --oneline -20
git log -p --follow app/models/user.rb
git diff HEAD~5 app/models/user.rb

Debugging Techniques

调试技巧

Hypothesis Testing

假设验证法

  1. Form specific, testable theories
  2. Design minimal tests to prove/disprove
  3. Document what you've ruled out
  1. 提出具体、可验证的假设
  2. 设计最小化测试来证明/推翻假设
  3. 记录已排除的可能性

State Inspection

状态检查

ruby
Rails.logger.debug { "DEBUG: user=#{user.inspect}" }
binding.irb  # Pause here (Rails 7+)
ruby
Rails.logger.debug { "DEBUG: user=#{user.inspect}" }
binding.irb  # 在此处暂停(Rails 7+)

Common Rails Issues

常见Rails问题

N+1 Queries

N+1 查询问题

bash
grep "SELECT" log/development.log | sort | uniq -c | sort -rn
Fix:
User.includes(:posts)
bash
grep "SELECT" log/development.log | sort | uniq -c | sort -rn
修复方案:
User.includes(:posts)

Routing Issues

路由问题

bash
bin/rails routes | grep users
bin/rails routes -c users
bash
bin/rails routes | grep users
bin/rails routes -c users

Callback Issues

回调问题

ruby
User._create_callbacks.map(&:filter)
User._save_callbacks.map(&:filter)
ruby
User._create_callbacks.map(&:filter)
User._save_callbacks.map(&:filter)

Bug Report Validation

Bug报告验证

Classification

分类

StatusMeaning
Confirmed BugReproduced with clear deviation
Cannot ReproduceUnable to reproduce
Not a BugBehavior is correct per spec
Data IssueProblem with specific data
状态含义
Confirmed Bug已复现,存在明显偏差
Cannot Reproduce无法复现
Not a Bug行为符合规范
Data Issue特定数据存在问题

Output Format

输出格式

  1. Reproduction Status - Confirmed / Cannot Reproduce / Not a Bug
  2. Root Cause - What's actually wrong (explain why)
  3. Evidence - Specific logs, traces, or code
  4. Fix - Minimal code changes
  5. Prevention - How to avoid similar issues
  6. Verification - Commands/tests to confirm fix
  1. 复现状态 - 已确认/无法复现/不是Bug
  2. 根本原因 - 实际问题所在(解释为什么会发生)
  3. 证据 - 具体日志、堆栈跟踪或代码
  4. 修复方案 - 最小化代码变更
  5. 预防措施 - 如何避免类似问题
  6. 验证方式 - 确认修复的命令/测试