2014-05-12 13 views
1

我想用CSV文件填充我的数据库。我已经找上的其他问题,并尝试一切后,我坚持,并能想出这样的:导入CSV文件的数据,不知道如何构建任务'csv:import_movies'

# 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中的csv文件。提前致谢!

+1

如果运行'耙-T''任务CSV :import_movies'在列表中? –

+0

@PhilidorGreen我刚刚跑过'rake -T',它不在列表中。 – crentist

+0

您需要在rake任务中的'namespace'上添加'desc',以便能够使用'rake -T'查看它。 – wintermeyer

回答

1

尝试重命名你的耙文件 - “csv.rake”,并删除周围的[]:环境

也把描述的内部:命名空间

相关问题