Rails nokogiri 传到服务器上后不能解析 xml

tianshuai · 2013年04月18日 · 最后由 tianshuai 回复于 2013年04月18日 · 3014 次阅读

最近碰到一个奇怪的问题,我用 nokogiri 在本地测试可以正常解析 xml 文件,但发布到线上却解析不到了……

    require 'nokogiri' 
if File.exist?(path)
  puts "xml文件已存在"
  @doc = Nokogiri::HTML(File.open(path))
    puts "doc文件类型:#{@doc.class}" if @doc.present? 
  @doc.css('item').each do |item|
    puts "第一次循环出的数据类型:#{item.class}" if item.present?
  end#循环结束
end

可以确定的是 xml 文件可以找到,而且和测试的是同一个 xml 文件,doc 文件类型也能正常打印出来是 Nokogiri 类型,就是在递归时没有输出,在本地测试都没问题,请教各位大侠!(应该不是权限问题,只是读文件,而且在服务器上和本地测试权限是一样的 File.stat('***/public/rss/data.xml').mode ?)

首先 推荐用 Crack::XML,Nokogiri 我遇到过卡死进程的大坑 你看看@doc.css('item').size

#1 楼 @zj0713001 数量大概 2 万左右,当时是考虑过 xml 文件会不会过大,大概 10M 左右,服务器会不会有什么限制了,然后把 xml 文件减小到 1M 也解析不出来……

#2 楼 @tianshuai 额 怎么放了一个这么大的 XML 在 public 目录下面呢... 你在服务器的 console 下调试一下试试?

建议在 console 里跑一下,在循环里将 if 条件去掉看看呢

#3 楼 @zj0713001 #4 楼 @naitnix 在 console 里也试了,@doc 是存在的,就是执行@doc.css('item').size 时为 0,在本地 console 跑就没问题,这也太奇怪了……

极有可能是编码问题..被坑过无数次的路过。。 试着在服务器上打印出 doc 的 content 看下,是不是乱码,是的话 encode 下就 ok 了

#6 楼 @jjym 试了,打印出来是空的,应该不是编码问题,都是在 linux 环境下,编码我们都用的 utf8 的,实在不行换个 gem 试试吧……不甘心啊

需要 登录 后方可回复, 如果你还没有账号请 注册新账号