2017-03-10 1 views
0

데이터베이스를 가져 오려고하는 xml 데이터가 있습니다. nokogiri gem을 사용하려고합니다. xml_data.rb라는 파일을 작성했습니다.레일에서 XML 데이터를 가져 오는 방법 5

xml_data.rb:8:in block in <main>': uninitialized constant Job (NameError) from C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.0.1-x86-mingw32/lib/nokogiri/xml/node_set.rb:187:in block in each' from C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.0.1-x86-mingw32/lib/nokogiri/xml/node_set.rb:186:in upto' from C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.0.1-x86-mingw32/lib/nokogiri/xml/node_set.rb:186:in each' from xml_data.rb:7:in `'

내가 제대로이 작업을 수행하는 방법을 알고 있어야하지 않아요 : 나는 명령 줄에서 >ruby xml_data.rb를 실행하면, 나는 다음과 같은 오류를받을.

require 'nokogiri' 

OLD_DATA = 'data/old_data.xml' 

doc = File.open(OLD_DATA) {|f| Nokogiri::XML(f)} 

doc.css('request').each do |node| 
    Job.create(
     :last_name => node['name'], 
     :telephone => node['phone'], 
     :street_address => node['address'], 
     :city => node['city'], 
     :state => node['state'], 
     :zip => node['zip'], 
     :email => node['email'], 
     :au_chog => node['chogAu'], 
     :person_type => node['affil'], 
     :research_use => node['use'], 
     :subject => node['subject'], 
     :notes => node['note'], 
     :start_date => node['startDate'], 
     :end_date => node['addDate'], 
     :complete => true, 
     :time_spend => node['hours'] 
    ) 
end 

루비 : v2.3.3 레일 : V5.0.1

UPDATE

나는 레이크 작업이 될이 코드를 재 작성 아래 xml_data.rb 파일입니다. 그러나, 나는 이것을하지 않았다. 작업을 실행할 때 XML 구문과 관련이있는 몇 가지 구문 오류가 발생합니다. 업데이트 된 코드는 다음과 같습니다.

require 'nokogiri' 

namespace :db do 
    namespace :seed do 

    desc 'Add old data to database' 
    task :import_data => :environment do 


     OLD_DATA = "#{Rails.root}/lib/assets/data/old_data.xml" 

     doc = Nokogiri::XML(File.open(OLD_DATA)) do |config| 
      config.options = Nokogiri::XML::ParseOptions::STRICT 
     end 

     doc.css("request").each do |node| 
      Job.create(
       :last_name => node['name'], 
       :telephone => node['phone'], 
       :street_address => node['address'], 
       :city => node['city'], 
       :state => node['state'], 
       :zip => node['zip'], 
       :email => node['email'], 
       :au_chog => node["chogAu"], 
       :person_type => node['affil'], 
       :research_use => node['use'], 
       :subject => node['subject'], 
       :notes => node['note'], 
       :start_date => node['startDate'], 
       :end_date => node['addDate'], 
       :complete => true, 
       :time_spend => node['hours'] 
      ) 
     end 
    end 
    end 
end 

답변

0

레이크 작업으로 다시 작성하십시오.

require 'nokogiri' 

namespace :db do 
    namespace :seed do 

     desc 'Add old data to database' 
     task :import_data => :environment do 

      OLD_DATA = "#{Rails.root}/lib/assets/data/old_data.xml" 

      doc = Nokogiri::XML(File.open(OLD_DATA)) do |config| 
       config.options = Nokogiri::XML::ParseOptions::STRICT 
      end 

      doc.css("request").each do |node| 
       Job.create(
        :last_name => node['name'], 
        :telephone => node['phone'], 
        :street_address => node['address'], 
        :city => node['city'], 
        :state => node['state'], 
        :zip => node['zip'], 
        :email => node['email'], 
        :au_chog => node["chogAu"], 
        :person_type => node['affil'], 
        :research_use => node['use'], 
        :subject => node['subject'], 
        :notes => node['note'], 
        :start_date => node['startDate'], 
        :end_date => node['addDate'], 
        :complete => true, 
        :time_spend => node['hours'] 
       ) 
      end 
     end 
    end 
end 
+0

구문 오류가 계속 발생합니까? 이것은 실행해야하는 것 같습니다 ... – Glyoko

+0

나는 아니에요. 나는 문제를 일으키는 선이 있었다. 내가 그것을 발견했을 때, 나는 그 글을 업데이트했다. – pshowell

0

작업이 실제로 레일 환경에서 실행되지 않으므로 정의되지 않았습니다. 레일 당신의 외부 당신이 뭔가를 시도 할 경우

require File.expand_path(File.dirname(__FILE__) + 'config/environment') 
+0

확인. 이것은 내가 지금 받고있는 오류입니다 'C : /RailsInstaller/Ruby2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb : 55 :'require '에 :이 파일을로드 할 수 없습니다 - C :/Site/arch_record_keeper/config/environments (LoadError) from C : /Rails2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb : 55 : 'require'에 xml_data의 입니다. rb : 1 : in '

' ' – pshowell

+0

이 파일의 위치는 어디입니까? 레일 홈 디렉토리에 있습니까? – Sladey

+0

그렇지 않습니다. 앱의 app/assets 디렉토리에 있습니다. – pshowell

0

를 추가합니다.

require 'nokogiri' 
require 'active_record' 

ActiveRecord::Base.establish_connection(
    adapter: 'mysql2', # or 'postgresql' or 'sqlite3' or 'oracle_enhanced' 
    host:  'localhost', 
    database: 'your_database', 
    username: 'your_username', 
    password: 'your_password' 
) 

class Job < ActiveRecord::Base 
end 

class ExampleData 
    attr_reader :file 

    def initialize(file) 
    @file = file 
    end 

    def xml 
    Nokogiri::XML(open(file)) 
    end 

    def create_jobs 
    xml.css('request').each do |node| 
     Job.create(
     :last_name => node['name'], 
     :telephone => node['phone'], 
     :street_address => node['address'], 
     :city => node['city'], 
     :state => node['state'], 
     :zip => node['zip'], 
     :email => node['email'], 
     :au_chog => node['chogAu'], 
     :person_type => node['affil'], 
     :research_use => node['use'], 
     :subject => node['subject'], 
     :notes => node['note'], 
     :start_date => node['startDate'], 
     :end_date => node['addDate'], 
     :complete => true, 
     :time_spend => node['hours'] 
    ) 
    end 
    end 


    file = File.dirname(__FILE__) + "/data/old_data.xml" 
    example_data = ExampleData.new(file) 
    example_data.create_jobs 
end 
관련 문제