2012-04-26 9 views
3

このデータは頻繁に更新されないため、Youtube APIへの呼び出しを最小限に抑えたいと考えています。私はこのキャッシュしようとすると:キャッシュYoutube API Nokogiriエラーの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ではなく、鋸山のオブジェクトをキャッシュすることもできます。これを試してみてください:

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

恐ろしいです。しかし、フィード全体を読むと、「ファイル名が長すぎます」というメッセージが表示されます。どのようにこの問題を回避するための任意のアイデアですか? – Marc

+0

ライフセーバー!ありがとう –