我正在尝试将在线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数据库?
感谢您的时间。
答案 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
字段。)