rake任务将xml从网站解析为rails数据库

时间:2015-10-28 15:13:30

标签: ruby-on-rails xml

我正在尝试将在线xml文件中的数据导入到我已经构建的rails数据库中。以下是我编写的整个rake任务。它保存在我的应用程序的lib / tasks / xml_parser.rake中。

  require 'open-uri'
  doc = Nokogiri::XML(open("https://dl.dropboxusercontent.com/u/21695507/openplaques/gb_20151004.xml")) do |config|
    config.options = Nokogiri::XML::ParseOptions::NOERROR
  end

  doc.css('plaque').each do |node|
    children = node.children

    Plaque.create(
    :title => children.css('title').inner_text,
    :subject => children.css('subjects').inner_text,
    :colour => children.css('colour').inner_text,
    :inscription => children.css('inscription raw').inner_text,
    :latitude => children.css('geo')['latitude'],
    :longitude => children.css('geo')['longitude'],
    :address => children.css('address').inner_text,
    :organisation => children.css('author').inner_text,
    :date_erected => children.css('author').inner_text,
    )
  end 
end 

我正尝试使用以下命令从命令行运行它:$ rake plaques_import。 当我运行命令时,它返回“已杀死”。 我的问题是:

(1)上述代码有什么明显错误吗?

(2)我是否需要在xml_parser.rake文件或其他地方编写其他代码,以便创建rake任务?

(3)假设代码完整正确,为什么它会返回“被杀”?

(4)是否有一个很好的资源可以逐步向我展示如何将xml从网站导入rails数据库?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

首先,您可以在Create括号的末尾删除额外的逗号。如果这不起作用......

试试这个

 require 'rake' 
    require 'open-uri' 
    namespace :xml_parser do 
    task :new_task => :environment do 
    doc = Nokogiri::XML(open("https://dl.dropboxusercontent.com/u/21695507/openplaques/gb_20151004.xml")) 
doc.css('plaque').each do |node| 
children = node.children 
Plaque.create(
            :title => children.css('title').inner_text,
            :subject => children.css('subjects').inner_text,
            :colour => children.css('colour').inner_text,
            :inscription => children.css('inscription raw').inner_text,
            :latitude => children.css('geo')['latitude'],
            :longitude => children.css('geo')['longitude'],
            :address => children.css('address').inner_text,
            :organisation => children.css('author').inner_text,
            :date_erected => children.css('author').inner_text
            )   
    end
    end

然后运行rake xml_parser : new_task 这应该工作。 (另外,请检查您是否正确导入:organisation:date_erected字段。)