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文件。提前致謝!
如果運行'耙-T''任務CSV :import_movies'在列表中? –
@PhilidorGreen我剛剛跑過'rake -T',它不在列表中。 – crentist
您需要在rake任務中的'namespace'上添加'desc',以便能夠使用'rake -T'查看它。 – wintermeyer