2016-07-25 73 views
0

我最近開始做一個寶石爲我的項目之一,但是當它到達的某一部分,而運行它只是停止執行,並向右走到底,並返回一個空數組。問題是在parse_results功能插件停止執行代碼而不產生錯誤

def parse_results(result) 
    puts result 
    result_hash = Hash.new 
    result_hash["url"] = result.id 
    result_hash["score"] = result.rule_groups["SPEED"].score 

    result_hash["rule_results"] = Hash.new 
    # it cuts out right as it tries this puts command below, nothing is output 
    puts result_hash["rule_results"]["AvoidLandingPageRedirects"].localized_rule_name 
    rule_result_names = ["AvoidLandingPageRedirects", "EnableGzipCompression", "LeverageBrowserCaching", "MainResourceServerResponseTime", "MinifyCss", "MinifyHTML", "MinifyJavaScript", "MinimizeRenderBlockingResources", "OptimizeImages", "PrioritizeVisibleContent"] 
    rule_result_names.each do |rule| 
    puts rule 
    result_hash["rule_results"][rule] = Hash.new 
    result_hash["rule_results"][rule]["name"] = result.formatted_results.rule_results[rule].localized_rule_name 
    result_hash["rule_results"][rule]["impact"] = result.formatted_results.rule_results[rule].rule_impact 
    result_hash["rule_results"][rule]["advice"] = result.formatted_results.rule_results[rule].format 
    end 
    puts result_hash 
    return result_hash 
end 

這種嘗試做,即使陣列樹立優良的.each一部分時,它會切出之前。任何線索,爲什麼會發生這種情況?網址和分數都設置得很好。它正在通過來自Google的Json/Hash對象,這是有效的。這也是不尋常的,因爲這些命令在我用pry進行調試時工作得很好,至少現在代碼截斷了puts命令。讓我知道是否需要其他任何東西。提前致謝!

+0

有時奇怪的錯誤,錯誤在開發的寶石是因爲你沒有加載你的寶石的正確版本。你確定你實際上是加載了你的寶石的最新版本,而不是一些測試代碼或以前的版本,因爲你忘了正確提交代碼。除非您在異常處理程序中運行該方法,否則方法通常不會在沒有錯誤的情況下停止執行中間流。 – Casper

+0

@Casper據我所知,我根本沒有更新它的版本,只是堅持默認的0.1.0,並一直在使用它。這聽起來像一個錯誤,但它會發生。我會在明天嘗試更新版本。如果我有相互矛盾的版本,這也會發生嗎? – KJS

+0

我的意思是你確定你的程序正在加載你認爲正在加載的gem。但從你的其他反應看來,它正在加載正確的。一個簡單的測試是修改你的寶石,並在代碼中添加一行例如'puts'TEST「',看看你的程序是否打印這行。 – Casper

回答

0

的問題最終被調用這一功能。給定的功能依賴於批量調用谷歌的apis。它會嘗試更新結果我給它的塊,並會導致在此parse_results功能像這些

0

什麼都沒有輸出,因爲result_hash["rule_results"]是一個空的哈希值。

實際上,這是發生了什麼事:

2.2.2 :001 > some = Hash.new 
=> {} 
2.2.2 :002 > puts some['foo'].bar 
NoMethodError: undefined method `bar' for nil:NilClass 

這有可能是你沒有看到一個例外,因爲有些部分代碼或創業板公司正在吞噬異常,並返回一個空數組。

+0

啊// @ pdoherty926你爲放在第一位說法絕對正確的,它應該是'result.formatted_results.rule_results [「AvoidLandingPageRedirects」]'。但我仍然遇到了該行被省略的問題。你看到任何會干擾'.each'聲明的東西嗎? – KJS

+1

沒有什麼會跳出來對我。我建議在每個循環中進行靜態突變,以確認您的實驗開始。例如'result_hash [「rule_results」] [rule] = rule'。你是否正在拯救'Exception'或其他什麼地方,以防止你看到這種方法可能產生的任何錯誤? – pdoherty926