2011-03-10 71 views
5

我正在rails rails中運行rails exception-notifier gem。當發生異常,並且應該發送一封電子郵件時,我從ParameterFilter類中得到一個異常。我在rails源代碼中發現了這個問題,但我不確定是否繼續。Rails:ParameterFilter :: compiled_filter嘗試複製符號

該問題發生在ActionDispatch :: Http :: ParameterFilter中。在compiled_filter方法中,錯誤發生在第38行:key = key.dupkey是一個符號時,因爲符號不可複製。這裏是源:

def compiled_filter 
    ... 
    elsif blocks.present? 
     key = key.dup 
     value = value.dup if value.duplicable? 
     blocks.each { |b| b.call(key, value) } 
    end 

我看到他們只能撥打dupvalue當它是duplicable。如果我修補源只在keykeyduplicable,然後我的問題消失。我假設作者爲什麼把這個條件放在value而不是key,所以我很好奇,如果有人對這個代碼有更好的理解。

只有當您將一個塊添加到application.rb中的過濾參數時纔會出現此錯誤。所以,也許有一個解決方案,我的原始問題,不需要在這裏使用塊。如果你有興趣看到我的同事的問題Rails: Filter sensitive data in JSON parameter from logs

這是一個問題的關鍵:action。這來自鐵軌,我不知道是否有任何方法強制它成爲一個字符串,而不是。

我提出了軌道錯誤https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter,我有一個補丁,如果key.duplicable?添加到key.dup行,我正在尋找關於是否是正確的解決方案的輸入。

+0

你有沒有得到答案? – 2012-12-31 15:47:12

回答

2

這看起來像一個Rails中的錯誤。密鑰應該是一個字符串而不是一個符號,或者dup應受duplicable?的保護。

你應該在https://rails.lighthouseapp.com/提交一個錯誤,如果可能的話,包括一個最小的測試用例。