使用Nokogiri错误缓存Youtube API XML响应 - 编组错误?

Mar*_*arc 3 xml caching ruby-on-rails youtube-api nokogiri

我想尽量减少对Youtube API的调用,因为这些数据不会经常刷新.当我尝试缓存此时:

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
Run Code Online (Sandbox Code Playgroud)

我在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.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Joh*_*hat 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)
Run Code Online (Sandbox Code Playgroud)