2012-11-06 30 views
2

我使用Marshal類序列化Ruby對象,使用功能:dump()load()一切正常,但是當不與任何串行數據的值通過,load()函數返回預期和邏輯錯誤:元帥類,有沒有一種方法來查找數據是否已經序列化?

incompatible marshal file format (can't be read) 
format version 4.8 required; 45.45 given 

我需要的是在加載之前檢查這些數據是否已經被序列化。我的目標是避免這個錯誤,並做其他事情。

回答

-1

也許只是從錯誤中拯救?

begin 
    Marshal.load("foobar") 
rescue TypeError 
    # not a marshalled object, do something else 
    puts "warning: could not load ..." 
end 
+0

謝謝Padde,我想到了這一點,但它對我的情況沒有用! 事實上,我正在處理一個表中的預先存在的數據,只有當我的代碼處理一個沒有所需序列化的記錄時,我想序列化一個空對象,然後用頭填充新值用戶,「救援」帶我離開指導過程! –

-1

我已經申請Padde方式,但使用的是做這項工作對我來說,讓我回來的對象,無論是先在的或新的如下創建了一個功能:

def get_serialized_banner 
    begin 
    @banner_obj = Marshal.load(self.path) 
    rescue TypeError 
    self.path = Marshal.dump(Banner.new()) 
    self.save 
    @banner_obj = Marshal.load(self.path) 
    end 
    return @banner_obj 
end 
0

確定。我遇到了非常類似的問題,根據這篇文章http://lists.danga.com/pipermail/memcached/2007-December/006062.html的提示,我發現這種情況發生在您嘗試加載數據時未在之前編組,數據存儲不正確(例如,不是二進制數據庫中的字段)。

在我來說,我專門在數據庫中使用文本類型,而不是二進制場,和元帥數據得到了錯位。

幫助將文本列的類型更改爲二進制文件。不幸的是,你不能轉換舊的(損壞的)數據,所以你必須刪除該列並以二進制形式重新創建它。

相關問題