2012-04-26 48 views
3

我想盡量減少對Youtube API的調用,因爲這些數據不會經常刷新。當我嘗試緩存此:存在Nokogiri錯誤緩存Youtube API XML響應 - 編組錯誤?

Rails.cache.fetch("youtube-#{@yt_name}", :expires_in => 1.day) do 
    @youtube_doc = Nokogiri::XML(open("https://gdata.youtube.com/feeds/api/users/#{@yt_name}/uploads")) 
end 

我在Heroku上得到一個錯誤:

Marshalling error for key 'youtube-NAME': no marshal_dump is defined for class Nokogiri::XML::NodeSet 
You are trying to cache a Ruby object which cannot be serialized to memcached. 

任何想法?

回答

5

您可能想要緩存XML而不是Nokogiri對象。試試這個:

xml = Rails.cache.fetch("youtube-#{@yt_name}", :expires_in => 1.day) do 
    open("https://gdata.youtube.com/feeds/api/users/#{@yt_name}/uploads").read 
end 
@youtube_doc = Nokogiri::XML(xml) 
+0

太棒了。但是,由於它在整個Feed中讀取,所以我得到的'文件名太長'。有關如何解決此問題的任何想法? – Marc 2012-04-28 03:18:05

+0

救命!謝謝 – 2013-01-02 12:27:31