簡體   English   中英

使用CSV文件導入數據,不知道如何構建任務'csv:import_movies'

[英]Import data with CSV file, Don't know how to build task 'csv:import_movies'

我正在嘗試用CSV文件填充數據庫。 我已經在SO上尋找其他問題,並且在嘗試了所有問題之后,終於想到了:

# lib/tasks/import.rake
require 'csv'

desc 'Import Movies'
namespace :csv do
  task :import_movies => [:environment] do
    csv_file = '#{Rails.root}/lib/data/movie.csv'

    CSV.foreach(csv_file, headers: true) do |row|
      Movie.create! ({
        name: row[0],
        url: row[1],
        year: row[2],
        description: row[3],
        genre: row[4]
        })
    end

    # this was also a method others were recommending so I saved it
    #CSV.foreach(filename, :headers => true) do |row|
      #Movie.create!(row.to_hash)
    #end

  end
end

但是當我運行rake csv:import_movies此錯誤運行rake csv:import_movies --trace

rake aborted!                                                                                   
Don't know how to build task  'csv:import_movies'                                                                        
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/task_manager.rb:62:in`[]'                                                                 
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/application.rb:149:in `invoke_task'                                                                              
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/application.rb:106:in `block (2 levels) in top_level'                                                            
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/application.rb:106:in `each'                                                                                     
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/application.rb:106:in `block in top_level'                                                                       
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/application.rb:115:in `run_with_threads'                                                                         
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/application.rb:100:in `top_level'                                                                                
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/application.rb:78:in `block in run'                                                                              
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/application.rb:176:in `standard_exception_handling'                                                              
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/lib/rake/application.rb:75:in `run'                                                                                      
/home/action/.rvm/gems/ruby-2.1.1/gems/rake-10.3.1/bin/rake:33:in `<top(required)>'             
/home/action/.rvm/gems/ruby-2.1.1/bin/rake:23:in `load'                                                                                     
/home/action/.rvm/gems/ruby-2.1.1/bin/rake:23:in `<main>'                                                                                   
/home/action/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `eval'                                                                                     
/home/action/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `<main>'

我也嘗試使用這種方法

# db/seeds.rb
require 'csv'

csv_file_path = '#{Rails.root}/lib/data/movie.csv'
File.open(csv_file_path) do |movies|
  movies.read.each_line do |movie|
    title, url, year, description, genre = movie.chomp.split(",")
    Movie.create!( name: title, url: url, year: year, description: decription, genre: genre )           
  end
end

然后運行rake db:seed --trace ,然后又出現了一個錯誤:

** Invoke db:seed (first_time)                                                                               
** Execute db:seed                                                                                    
** Invoke db:abort_if_pending_migrations (first_time)                                                                               
** Invoke environment (first_time)                                                                               
** Execute environment                                                                                
** Execute db:abort_if_pending_migrations

我運行rake db:migrate:status並得到了它,這很奇怪,而且我之前從未見過:

Status   Migration ID    Migration Name                                                                                       
--------------------------------------------------                                         
up     20140407094349  ********** NO FILE **********                                                                                 
up     20140407094355  ********** NO FILE **********                                                                                 
up     20140407094405  ********** NO FILE **********                                                                                 
up     20140409112119  ********** NO FILE **********                                                                                 
up     20140409113144  ********** NO FILE **********

我希望有人對此有所了解,因為這是我第一次嘗試在Rails中使用rake和csv文件。 提前致謝!

嘗試將rake文件重命名為-'csv.rake'並刪除:environment周圍的[]

也把描述放在:namespace里面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM