2012-11-30 153 views
1

我正在部署我的軟件(首次在新環境中)並幾乎立即打牆。驗證失敗,無效Hashref

我有一個未通過HashRef驗證的值,但是我能想到的每個測試都使它看起來應該是有效的。

屬性(存儲)不通過類型約束,因爲:驗證失敗 'HashRef',值爲MyApp的:: CatalystAuthStore = HASH(0x7fa98fffa590)...

傾倒該值會產生一個有效-looking hashref:

bless({ 
    'config' => { 
        'class' => '+MyApp::CatalystAuthStore', 
        'use_userdata_from_session' => 1 
       } 
    }, 'MyApp::CatalystAuthStore') 

當我使用標量::的Util :: RefType的嘗試自我驗證,則返回 'HASH' 我的價值。所以如果一會兒,我們可以排除我的代碼的一個問題,並考慮到這是第一次發生在部署,什麼是一個很好的方式來看看穆斯的哪部分工作不正常我的構建?

謝謝!

回答

3

HashRef特別尋找一個未經過散列的散列,但你的是有福的(一個MyApp :: CatalystAuthStore對象)。也許MyApp::CatalystAuthStore將是一個更合適的類型使用?如果沒有,你可以很容易地創建一個類型,它接受有福和無用的散列。

subtype 'AnyHashRef' 
    => as 'Defined' 
    => where { Scalar::Util::reftype($_) eq 'HASH' } 
    => inline_as { "(Scalar::Util::reftype($_[1]) eq 'HASH')" }; 
+0

我可能永遠不會明白爲什麼它在開發過程中一直在我的測試環境中工作,但你是完全正確的。 – Ryan