创建用于从csv文件导入数据的rake任务

时间:2014-10-06 08:15:59

标签: ruby-on-rails ruby rake rake-task

我正在创建一个rake任务来将csv文件数据导入我的数据库(MySQL)。这是我做的,但它不起作用

require 'csv'
namespace :tech do                                                                                                                                          

desc "Import tech from csv file"

task temp: :environment do

file = "tech.csv"

CSV.foreach(file, :headers => true) do |row|
  Temp.create ({
                         :current => row[1],
                         :today => row[2],
                         :week=> row[3],
                         :month => row[4]
                       })
end

端 端

但是当我运行rake tech:temp时会抛出此错误

Don't know how to build task 'tech:temp'
y/gems/2.0.0/gems/rake-10.3.2/lib/rake/task_manager.rb:62:in `[]'
/p353/lib/ruby/gems/2.0.0/gems/rake-10.3.2/lib/rake/application.rb:149:in `invoke_task'
lib/ruby/gems/2.0.0/gems/rake-10.3.2/lib/rake/application.rb:106:in `block (2 levels) in    top_level'
 /lib/ruby/gems/2.0.0/gems/rake-10.3.2/lib/rake/application.rb:106:in `each'

 /lib/ruby/gems/2.0.0/gems/rake-10.3.2/lib/rake/application.rb:106:in `block in top_level'

 /lib/ruby/gems/2.0.0/gems/rake-10.3.2/lib/rake/application.rb:115:in `run_with_threads'

  /lib/ruby/gems/2.0.0/gems/rake-10.3.2/lib/rake/application.rb:100:in `top_level'
  lib/ruby/gems/2.0.0/gems/rake-10.3.2/lib/rake/application.rb:78:in `block in run'
  /lib/ruby/gems/2.0.0/gems/rake-10.3.2/lib/rake/application.rb:176:in ` standard_exception_handling'
  lib/rake/application.rb:75:in `run'
  /ruby/gems/2.0.0/gems/rake-10.3.2/bin/rake:33:in `<top (required)>'
  bin/rake:23:in `load'
  /bin/rake:23:in `<main>'

迁移后我已经拥有Temp模型和数据库中的各个表

1 个答案:

答案 0 :(得分:3)

在编写rake任务以填充数据库中的数据时,我遇到了同样的问题。 在我的情况下,错误是相同的,只是以错误的方式运行rake任务。

我猜你也在做同样的事情,根据我猜错误

你正在运行rake tech:temp,其中任务是临时的,而命名空间是技术,这是错误的你应该传递给其他人,首先你需要给任务名称然后命名空间。

所以正确的命令是

rake temp:tech

希望这会奏效。我知道这很愚蠢