Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails4CSV文件递归加载_Ruby On Rails_Csv - Fatal编程技术网

Ruby on rails RubyonRails4CSV文件递归加载

Ruby on rails RubyonRails4CSV文件递归加载,ruby-on-rails,csv,Ruby On Rails,Csv,我在加载一个CSV文件时遇到了一个非常奇怪的问题,这让我简直疯了,对我来说毫无意义!我正在使用以下代码将CSV文件加载到我的数据库中: CSV.foreach(Rails.root.join('public','uploads', '0', csv_file.file_name), :headers => true, :header_converters => lambda { |h| h.try(:downcase)}) do |row| Exclusion.cre

我在加载一个CSV文件时遇到了一个非常奇怪的问题,这让我简直疯了,对我来说毫无意义!我正在使用以下代码将CSV文件加载到我的数据库中:

  CSV.foreach(Rails.root.join('public','uploads', '0', csv_file.file_name), :headers => true, :header_converters => lambda { |h| h.try(:downcase)}) do |row|
      Exclusion.create!(row.to_hash)
  end
我有一个14808条目的文件。如果我尝试立即加载该文件,出于某种原因,它会按预期将所有14808个条目添加到数据库中,但随后会从条目1重新开始。它继续以递归方式执行此操作,直到我停止服务器或它崩溃。如果我将文件分解为两个文件,那么各个文件将按预期添加到数据库中。我认为记录的数量可能有问题,但我能够加载一个包含100000条记录的csv文件,而没有这个问题。我很困惑为什么会发生这种情况。奇怪的是,如果我注释掉create语句并在那里放置一个计数器,它会在14808处停止。另外,如果我创建一个视图来打印每一行。to_散列,它将在14808处停止。我不知道将它保存到数据库中会导致它继续重复它自己吗?我使用的是SQLite3,但同样,我对包含100000条记录的CSV文件没有问题

更新


查看日志,看起来CSV文件已正确加载,所有记录都已添加到数据库中。Ruby甚至会在之后重定向到正确的url,但之后似乎会再次收到“加载文件”请求。由于我的屏幕在等待服务器处理CSV文件时已超时,这是否会导致错误并导致加载该文件的重复请求,或者服务器认为它尚未处理该请求并重新开始

浏览器有时会重复请求。如果您有一个指向一个操作(加载CSV文件的操作)的“全包”路由,那么请求favicon.ico的浏览器也可能会触发该路由


但是,我会问,为什么要使用web请求来实现此目的?csv_文件是否来自用户?如果没有(即,如果您已经有了要加载的CSV文件),我建议将其放入任务中并手动运行。

我仍在努力解决此问题。有没有什么原因让RoR无法识别它已到达csv文件的结尾并返回到该文件的开头?谢谢Frankpinto!加载CSV文件的操作是单独的。奇怪的是为什么它一直在重新加载。我想我将不得不创建一个工作线程来加载文件,因为它也会由用户启动,但是rake任务作为一个很好的临时修复程序工作!