Cute Bug

心态

首先是培养良好的心态,出现任何问题,都不过于慌张,不急着盲目尝试,而是先理清楚所遇到的问题、找到问题原因。

如果花了较多时间仍没解决问题,又已经很疲倦、头脑不清晰,那继续盲目死磕多半也收效甚微。这种情况下较好的处理方式是停下来休息一会儿,喝口水吃点东西、伸展身体放松一下,再接着有策略有方法地死磕。

下面是自己调试 Rails 时常用到的一些基本方法:

重启

  • 重启服务器
    Rails 很多文件里用到 require 加载依赖文件,文件被编辑后不会自动重载,需要重启服务器生效。

  • 重启终端
    有时候需要重启终端才能让文件更改生效; Spring 也只在关闭终端时才自动关闭。

  • 重启电脑
    极少数情况重启终端仍不行,如新安装一个 gem 后不能正常运行安装命令($ bin/rails g gem:install),反复检查没发现其他问题,同时在网络搜索也没发现类似问题。

  • 重启 Heroku 服务器
    Heroku 服务器在每次部署后自动重启,但 migrate 后可能不会立即重启,这时最好手动重启让更改立即生效;没有 migrate 访问网页只是出现 500 错误,不像在开发环境会明确提示需要 migrate。

调试信息

在终端检查错误日志时要把终端窗口显示到足够大,让日志内容以良好格式清晰显示,从而更容易从日志信息中发现错误原因。

  • 在 Rails 日志显示信息

    Rails.logger.info "---------- Start}"
    Rails.logger.info {"Info #{@object.attributes.inspect}"}
    Rails.logger.info "---------- End}"

  • 在网页上显示调试信息

    <%= debug @object %>
    <%= simple_format @object.to_yaml %>
    <%= @object.inspect %>

  • 在网页上使用 console

    <%= console %>, 或者使用 Better Errors

  • Rails Console

    如果网页上不能正常创建、保存对象,可在 Rails Console 里测试是否有问题,或者使用 Pry

编辑文件

  • 确认编辑的是目标文件,注意文件名是否正确、单复数、文件名后缀

    • YML 文件里要用 ERB,而不能直接用 Ruby
    • 默认所有文件后缀已经更改时,容易在 CSS 文件里使用 SCSS / coffee 文件里使用原生 JavaScript 而出现错误
    • 调整样式时确认有选中目标元素、class 名正确,可添加红色边框确认;属性名及对应值正确,属性名之间可能混淆,也有可能错把另一个属性的值添加到目标属性上。
  • 编辑器安装 linter 扩展,检查基本错误

  • 一次只改动一个地方,确认有效无效后再作其他改动

搜索

如果遇到的问题不熟悉,那就要借助搜索引擎的力量。如果能直接找到解决方案可喜可贺,如果找到的信息和遇到的问题不完全相符、内容不完整、内容不是最新,那可以尝试:

  • 查文档
    很多时候查文档更直接有效

  • 搜索对应 gem/工具的 Github Issues
    找到的问题更相关

最后 Rails Guides 是一个好地方: Debugging Rails Applications