Heroku + Mechanize将OBJ转换为String

时间:2013-04-02 23:54:58

标签: ruby-on-rails heroku mechanize

所以我有一个使用Mechanize来获取页面的应用程序。请注意我正在尝试解析的HTTP站点是* .TXT文件。

在IRB中我运行一个简单的程序,如:

require 'rubygems'
require 'mechanize'
require 'nokogiri'

@agent = Mechanize.new{|agent| agent.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0a2) Gecko/20111101 Firefox/9.0a2'}

@agent.get(http://some_sort_of_text_file.txt)

for line in @agent.page.content
puts line
end

运行正常,我将文本文件中的每一行作为输出。

但是当我把它推到Heroku时......我得到一个这样的错误:

NoMethodError (undefined method `each' for #<String:0x00000003ebf200>):

嗯......我发现由于一些奇怪的原因,该页面变成了一个巨大的字符串文件,我需要采取另一步来做一些编程,如:

  @doc = @agent.page.content
      @items =[]
      start =0
      @doc.gsub(/|/, " ")
      @doc.gsub(/\\n/,"|")
      counter=0
      while counter <= @doc.length
         if(@doc[counter]== "|")
           @items << @doc[start..counter]
           start=counter+1
         end
         counter = counter+1
      end

知道为什么它将该网站作为Heroku上的字符串,以及为什么我需要采取额外的步骤将每一行分解为一个数组?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

当我在本地计算机上以irb运行代码时,@agent.page.content是一个字符串。

如果您想要的是获取结果并将其转换为数组,这将起作用:

# (put this after @agent.get(http://some_sort_of_text_file.txt)
lines = @agent.page.content.split("\n")

# Now you can do something like this if you want
lines.each do |line|
  puts line
end