[url]前面一篇寫的帶流水了,這次專選乙個主題。
ror有debug功能,但是從未用過。但是開發過程中,總要看下執行環節中某些函式的呼叫是否正確,怎麼辦呢。
最開始的哪會,也就是剛剛學習ror哪會,輸出執行中間過程都是老實的用logger.info,logger.debug這些的。不過用了段時間,總覺得用的不爽。這幾個函式用於輸出文字還行,要直接看資料庫的查詢結果,hash的值這些都不方便。於是開始用p函式。
專案中類似
p test
p user.find(1)
p my_hash
開始逐漸增多。慢慢越來越多,p的輸出結果和順序都是看**的執行順序的,到了一定程度,一執行**螢幕上出現好幾十甚至好幾百的p函式輸出結果。 最終,我需要的輸出結果被淹沒在p的海洋中,怎麼也找不到了。
怎麼辦,加分割吧。然後**就變成這樣了
p "............................"
p user.find(1)
p "............................"
嗯,這下子好找很多了。好吧,我知道這個只是五十步笑百步。於是又有了下面的寫法
p "class user line 100"
p user.find(1)
p "out info #"
嘿嘿,治標不治本的寫法,不過出現這樣的情況,也是專案逐漸變大過程中的一部分,在一定規模下面,上面的這些都行。至於多少規模,各自感覺吧。
然後呢,開始有了質的變化,因為輸出太多,有些時候需要輸出,有的時候不需要,這樣就需要控制p的執行。於是有乙個函式寫成了這樣的
def do_some_action(id=nil,info="",debug=false)
p info if debug
end
現在查下整個專案**,也就只有乙個函式寫成這樣的,通過輸入引數來控制p的輸出。為啥只有乙個,我現在也有點想不起來了。 不過至少比起上面的寫法,進步了不少了吧。
過了段時間之後,又改進了寫法。
def debug(d=true)
@debug = d
enddef log(str)
actioncontroller::base.logger.debug str if actioncontroller::base.logger && (actioncontroller::base.logger.debug? || @debug)
p str if actioncontroller::base.logger && (actioncontroller::base.logger.debug? || @debug)
end
通過debug函式來控制是否需要輸出全部的log,然後在通過log函式來同時輸出到log檔案和console
這個寫法最終也沒有完全推廣開,就是乙個主檔案中用了下。
到目前為止,專案中有3種不同的執行log輸出方式了。最終這些都完全被淘汰了,上面的這些辦法過渡階段用用還行,多了實在頭痛。
最終需要知道某些變數的值之外,還要知道在那個檔案的哪一行等一些輔助資訊,這樣才能快速定位,修改。
通過je上各位的提示,最終版本的log輸出函式寫成了這樣的
def debug_print(str)
#return
call = caller[0].split("/")
tmp = call[call.size-1]
log = tmp + "::" + str.to_s
actioncontroller::base.logger.debug log if actioncontroller::base.logger && (actioncontroller::base.logger.debug? || @debug)
p log if actioncontroller::base.logger && (actioncontroller::base.logger.debug? || @debug)
end
通過這個,可以輸出類似這樣的資訊
[quote]
[/quote]
當然上面的這個函式還是有缺陷的,還是有改進的餘地的。這個不說。
自從把**中的前三種log輸出方法通通換成 debug_print之後,這樣舒服多了,需要的資訊一目了然。出錯位置也很清晰了。
不過還是有不太滿意的,隨著**執行過程中千百次的呼叫debug_print,整體執行速度下降了好多。 某個頁面帶debug_print執行,5秒,不執行debug_print 1秒不到。相差甚大。還好真正上線的時候,可以隨時調整debug_print的內容,這樣就沒事了。
log的事情基本上是完了,下次考慮寫下專案中配置檔案的變化,如何從yaml到dsl的。
一知半解用ruby開發
從第一次接觸ruby rails到現在有段時間了,本著一貫快學快用習慣,看了一遍書之後就開始用ror做了些小專案,邊做邊查,邊學邊忘,到現在還是沒有記住幾個ror的特徵關鍵字,比如什麼約定阿,約束什麼的,也分不清為啥有symbol這麼奇怪的物件。更加不清楚yield到底怎麼起作用的。不過這些並不妨礙...
Razor 一知半解
在園子裡看到一些關於mvc的文章 一園友提起了razor,對此頗感興趣,原文是這樣說的 如果想詳細了解razor 請看scottgu 的部落格,於是在baidu 在google 中 搜尋 scottgu 的部落格 搜尋到的全是 了解 razor 請看scottgu 的部落格 這句話.於是感覺網路時代...
一知半解之 RequestMapping
value 指定請求的實際位址,指定的位址可以是uri template 模式 後面將會說明 method 指定請求的method型別,get post put delete等 produces 指定返回的內容型別,僅當request請求頭中的 accept 型別中包含該指定型別才返回 params...