為什么heroku上debug這么難?
我們?cè)谧鲰?xiàng)目的時(shí)候,有時(shí)候在本地運(yùn)行的好好的,但是部署到heroku的時(shí)候就出現(xiàn)錯(cuò)誤。出錯(cuò)不可怕,可怕的是不知道錯(cuò)在哪里,下面的是heroku的錯(cuò)誤提示,只告訴你"something went wrong"。你要想問(wèn)然后呢?哦,下面還有行小字,如果你是網(wǎng)站擁有者,你可以查看logs。

那我們用heroku logs 來(lái)看下:密密麻麻的一堆,而且這樣的一堆還有好幾頁(yè),雖然其實(shí)還是有線索的,但是這樣找效率太低??吹娜艘荒樕鸁o(wú)可戀。

我知道你在想:「如果heroku能像localhost一樣直接來(lái)個(gè)報(bào)錯(cuò),告訴我們錯(cuò)誤在哪里就爽了?!?/p>
夢(mèng)想成真——第三方工具來(lái)救駕
正是因?yàn)橛羞@個(gè)需求,所以有不少第三方都在做這樣的工具,比較出名的有Aribrake,功能強(qiáng)大,但是缺點(diǎn)也比較明顯,最基礎(chǔ)的套餐也要49刀一個(gè)月,對(duì)于還在只是部署個(gè)人網(wǎng)站或小型應(yīng)用網(wǎng)站來(lái)說(shuō),太貴了。
那有沒(méi)有便宜點(diǎn)的,你別說(shuō),還真有!那就是我們今天本文的主角:Rollbar,以下是它的三大特點(diǎn):
1. 免費(fèi)
簡(jiǎn)直業(yè)界良心好嗎?免費(fèi)的方案每月可以有五千條錯(cuò)誤提示,錯(cuò)誤記錄保留30天。用于個(gè)人網(wǎng)站和普通網(wǎng)站的測(cè)試來(lái)說(shuō)完全夠用。

2. 簡(jiǎn)單
跟著下面的教程傻瓜式操作,五分鐘包教會(huì)。
3.實(shí)用
不但在部署不成功會(huì)提示,而且在部署成功后,網(wǎng)站在正常運(yùn)行期間如果出問(wèn)題的話也會(huì)提示。非常方便。
多說(shuō)無(wú)益,請(qǐng)直接打開(kāi)電腦跟著我操作。
五分鐘教程——配置篇:
Step1 注冊(cè)
打開(kāi)官網(wǎng)https://rollbar.com/ 直接注冊(cè)一個(gè)賬號(hào)。也可以使用你的Github賬號(hào)直接登錄。

Step2 新建項(xiàng)目
注冊(cè)完成后直接回跳轉(zhuǎn)到新建項(xiàng)目頁(yè)面,如下圖:

記住選中Rails,然后再輸入框內(nèi)輸入項(xiàng)目名稱,再點(diǎn)擊'continue'。就會(huì)進(jìn)入使用介紹頁(yè)面,如下圖:

這一步我們可以把生成的Server-side access token(上圖紅框處)復(fù)制下來(lái)備用。
提示:這個(gè)網(wǎng)頁(yè)暫時(shí)不要關(guān)閉。
Step3 在項(xiàng)目中添加gem 'rollbar'
這時(shí)候切換到本地的專案,用atom打開(kāi)gemfile,添加gem 'rollbar'到group :development, :test do之前。

保存Gemfile,然后在iterm中執(zhí)行bundle install。
Step4 配置
順次在iterm中執(zhí)行下面的代碼:
rails generate rollbar 剛剛復(fù)制的access token
heroku config:add ROLLBAR_ACCESS_TOKEN=剛剛復(fù)制的access token
rake rollbar:test
執(zhí)行完成后,你的注冊(cè)郵箱應(yīng)該會(huì)收到一封電子郵件,就是最后一句代碼發(fā)出測(cè)試的反饋信息。
Step5 完成配置
上一步完成之后,我們?cè)倩氐絉ollbar剛剛的網(wǎng)頁(yè)。點(diǎn)擊底部碩大的按鈕,下圖紅框處:

然后就會(huì)進(jìn)入控制面板,里面可以顯示heroku的錯(cuò)誤:

好,到這一步,配置就完成了,以后就能愉快的使用了。下面我們來(lái)展示一下到底怎么用。
五分鐘教程——使用篇:
那安裝好了,怎么用呢?其實(shí)不用做額外的操作,一旦本地或者h(yuǎn)eroku上發(fā)生錯(cuò)誤,Rollbar會(huì)自動(dòng)給你發(fā)郵件提示。然后根據(jù)具體的錯(cuò)誤信息debug就行了。
為了演示這個(gè)效果,我直接把我的項(xiàng)目的首頁(yè)的index.html.erb給刪了。來(lái)看看Rollbar會(huì)怎么給我提示。
Rollbar雖然主要用來(lái)在heroku上debug,但是在development環(huán)境下出現(xiàn)的錯(cuò)誤也是會(huì)提示的。我們下面就分成兩部分來(lái)看:
本地錯(cuò)誤提示
剛剛?cè)藶樵O(shè)置好沒(méi)有首頁(yè)的錯(cuò)誤之后,開(kāi)rails s,地址欄輸入localhosts:3000,直接會(huì)報(bào)錯(cuò)如下:

同時(shí)Rollbar會(huì)給我發(fā)一封郵件,也是一樣的錯(cuò)誤

點(diǎn)開(kāi)上圖鏈接后會(huì)進(jìn)入詳情界面,如下圖,上面的紅框提示開(kāi)發(fā)環(huán)境是development,下面的紅框是詳細(xì)的報(bào)錯(cuò)信息。

是不是和本地debug報(bào)錯(cuò)信息一樣的豐富?但是你會(huì)說(shuō),這不是多此一舉么?本地本來(lái)就有報(bào)錯(cuò)信息啊?是的,如果只是在本地的話,確實(shí)沒(méi)必要使用為的工具。但Rollbar的真正作用是在heroku上面遇到錯(cuò)誤也會(huì)給詳細(xì)提示,咱們接著看。
Heroku錯(cuò)誤提示
本地雖然出錯(cuò)了,但是我不管不顧還是push到heroku上面了,然后打開(kāi)heroku項(xiàng)目網(wǎng)址一看,什么情況?怎么不提示錯(cuò)誤呢?而且首頁(yè)怎么加載的這么慢?十幾秒過(guò)去了,還是一片空白。

這時(shí)候,我的手機(jī)“?!绷艘宦?,一看是郵箱收到Rollbar的錯(cuò)誤提示郵件了。頓時(shí)熱淚盈眶有沒(méi)有!
我們來(lái)看看錯(cuò)誤詳情,這次注意紅框處變成了production,也就是生產(chǎn)環(huán)境。報(bào)錯(cuò)信息也非常的豐富,和本地相比幾乎沒(méi)差別。是不是很完美!

總結(jié)
避免Heroku上出現(xiàn)bug的最好的思路應(yīng)該是這樣:
首先,保證在本地測(cè)試的時(shí)候一定要完整無(wú)bug。
其次,如果本地一切正常,Heroku還是有bug的話,再請(qǐng)Rollbar出馬。
附件:
在寫(xiě)該文時(shí)用到的16格筆記和思維導(dǎo)圖。
關(guān)于16格比較,你可以參考這篇文章:神奇的三30分鐘讀書(shū)法

