错误:导入数据CSV Rails 4

时间:2014-09-13 03:43:42

标签: ruby-on-rails ruby csv

我对使用CSV将数据导入SQL数据库的概念非常陌生。我已经关注了一些stackoverflow帖子,但我收到了错误消息。运行Errno::ENOENT: No such file or directory @ rb_sysopen - products.csv后,错误会显示 rake import:data 。我的application.rb中需要csv以及我创建了一个csv文件并将其放在TMP中。到目前为止,这是我的代码。
我知道我可能会从社区中寻求很多,但如果有人回答这个问题,你能否提供一些关于CSV和rake函数的更多见解。非常感谢!!!

<b>import.rake</b>
    namespace :import do 
        desc "imports data from a csv file"
        task :data => :environment do
            require 'csv'
            CSV.foreach('tmp/products.csv') do |row|
                name = row[0]
                price = row[1].to_i
                Product.create( name: name, price: price )
            end

        end
    end

3 个答案:

答案 0 :(得分:0)

指定CSV文件的完整路径。

例如,如果文件位于/tmp/中,则使用:

CSV.foreach('/tmp/products.csv') do |row|

如果products.csv文件位于您的应用程序tmp目录中,请使用:

CSV.foreach(Rails.root.join('tmp', 'products.csv')) do |row|

答案 1 :(得分:0)

我碰到了类似的东西,它忘了把两个括号括在括号中,所以你可能想试试去:

Product.create( name: name, price: price )

为:

Product.create({ name: name, price: price })

答案 2 :(得分:0)

查看smarter_csv宝石。

这是最简单的形式,你可以这样做:

      SmarterCSV.process('tmp/products.csv').each do |hash|
        Product.create( hash )
      end

将smarter_csv添加到您的Gemfile中,因此当您需要Rake任务中的环境时,它会自动加载

这会给你:

     namespace :import do
       desc 'imports data from given csv file'
       task :data, [:filename] => :environment do |t, args|
         fail "File not found" unless File.exists? args[:filename]

         options = {} # add options if needed
         SmarterCSV.process( args[:filename], options).each do |hash|
           Product.create( hash )
         end
       end
     end

这样称呼:

      rake import:data['/tmp/products.csv']

另请参阅:https://github.com/tilo/smarter_csv