2015-12-31 47 views
1

我已经在VPS上部署了我的Rails应用程序。我有一个上传csv文件并根据文件行创建记录的功能。我在ActiveAdmin中使用此功能。Rails - 无法从VPS上的csv文件创建记录

上传按钮的点击我呼吁通过Ajax调用import_csv方法。

的方法如下:

collection_action :import_csv, method: :post do 
    CSV.foreach(params[:file].path, headers: true) do |row| 
     item = Item.where(code: row["code"]).first || Item.new 
     row["status"] = row["status"].downcase if row["status"] 
     row["created_by"] = current_user.get_name 
     row["modified_by"] = current_user.get_name 
     item.attributes = row.to_hash 
     item.save! 
    end 
    render text: { success: "Successfully imported" }.to_json 
end 

那么成功,我得到了警觉"Successfully imported",如果有任何错误,我得到它在Ajax调用的错误块设定的"Something went wrong."警报。

现在的问题是:

我无法通过的项目模型CSV文件创建记录。我的CSV文件包含近70k行。我能够创建高达7500的记录。 如果我在CSV文件中放入7501行,我得到的警报为"Something went wrong"

此外在日志中我看不到任何错误。事实上,如果有7501行,我甚至看不到import_csv方法的请求。

这只发生在VPS上。在本地开发和生产模式下,我能够创建所有70k记录。

任何人都可以帮忙吗?我如何跟踪实际导致错误的内容?

编辑:

在CSV文件时,我可以把7500行和创建记录。下次我再次上传一个包含7500行的文件并成功创建记录。

在同一时间,我无法将大于7500的行放入文件中以创建记录。

+1

在'日志/ production.log'检查服务器日志,应该有一个例外。 – Jeiwan

+0

我提到过,在日志中没有看到任何异常的问题。 '也在日志中我看不到任何错误。事实上,如果有7501行,我甚至不能看到命中import_csv方法的请求。# –

+0

2建议:1)尝试将包含block的整个'CSV.foreach'包装在'begin..rescue..end ',赶上例外并将其打印到日志中。 2)使用CSV创建7500个项目,然后转到rails控制台并尝试手动创建一个。 – Jeiwan

回答

1

最后得到了错误的线索在浏览器控制台:Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)

的Nginx是造成这个问题。要解决此,我不得不设置

client_max_body_size 10M;

在nginx的配置文件为:

server { 
     listen  80; 
     server_name IP-Address; 
     location/{ 
      root /home/deploy/repos/application-name/public; 
      passenger_enabled on; 
      rails_env production; 
      client_max_body_size 10M; 
     } 
    ...... 
} 
相关问题