保华的Rails学习笔记

如何快速排除bug(一)

正式做全栈营线上助教一个星期了,还是挺有成就感的,帮助同学们取得进步的同时,也倒逼自己成长了许多,其实做助教如果想做好,每天要花的时间还挺多的,除了值班的时间段内替同学们解决问题,功夫往往还要下在别处,为了提高排查问题的速度,最近研究了一些linux命令,还是挺好用的,下边分享一下grep的简单、实用的用法

grep是搜索文本内容的强大工具,它把匹配出来的行展示出来,其中-i参数表示在匹配时,忽略大小写,-E参数后边可以用正则表达式,可以匹配多个内容,例如可以匹配包含has_many与belongs_to的行并显示到终端,善用grep命令行工具,可以大大提高排除bug的效率

heroku logs | grep -i error


当我们在上传heroku出错时,为了排查问题,会去看heroku logs信息,而heroku logs的信息,还是挺庞杂的,一行一行的找报错信息,还是挺费眼睛的,夸张一点,有点像大海捞针
直接执行heroku logs的结果如下图:


其实报错信息一般都会有error字眼,而heroku logs | grep -i error的作用,就是只显示包含有error的行,其他信息都不显示,这样大大减少了浏览器的log信息量,可以快速定位出错信息
用heroku logs | grep -i error的结果如下图:

git grep -i bootstrap

这个命令的作用是把这个专案中,文件中包含有bootstrap字眼的行展示出来,供我们集中查看,不用一个文件一个文件的排查问题了,大大提高了效率


我们直接可以在终端查看app/assets/javascripts/application.js、app/assets/stylesheets/application.scss和Gemfile中包含bootstrap的行了,更快的定位bug问题所在

git grep -i -E 'has_many|belongs_to'

这个命令的作用是把专案中的文件包含有has_many或者belongs_to的行列出来,展现到终端,它的执行结果如下:


当发生关联关系错误时,用这句命令可以快速定位问题所在,不需要一个一个文件打开,如上例中,相当于我们直接查看group.rb、post.rb、user.rb和group_relationship.rb这4个文件中起关联作用的行,效率提高了不少吧

grep的主要作用就是文本搜索,大家可以展开想象,扩展它的应用场景

使用一些简单的linux命令工具辅助查找问题,可以大大提高效率,这些命令的作用很强大,它有很多选项,不过不建议过度深究,能达到我们想要的效果,够用就行