CSV导入使用Rails,Postgres和Sidekiq

时间:2017-06-13 20:27:03

标签: postgresql csv heroku ruby-on-rails-5 sidekiq

我正在使用Rails构建客户管理系统,该系统要求将包含客户信息的CSV文件导入/扩散到Postgres数据库中。我正在Heroku上托管应用程序。我将数据库移到了Sidekiq的后台,但需要建议将文件上传到哪里以便导入。在S3上托管文件真的是最好的解决方案,还是有一个更简单的解决方案而不使用第三方存储服务?该应用程序将每天使用,但最多可使用10名员工,上传的大型CSV文件大约为100,000行。

感谢。

1 个答案:

答案 0 :(得分:2)

是的,我认为S3是最好的解决方案

我们在Storemapper面临同样的问题(我们使用Resque而不是Sidekiq,但这不是问题)。这里的限制因素是Heroku请求超时。你只有30秒才能完成上传到Heroku,这对你的csv有多大限制。这就是S3的来源。基本上我们做的是:

  1. 用户通过javascript直接将csv上传到S3,绕过Heroku上的app服务器。

  2. 上传完成后,javascript向app服务器发出请求,该服务器将启动后台工作人员,告诉工作人员该文件位于S3

  3. 工作人员从s3下载csv,然后根据需要进行处理

  4. 我发现carrierwave_direct gem对步骤1和2非常有帮助。对于第3步,我使用了smarter_csv gem。在这里查看我们的完整故事: https://tylertringas.com/very-large-csv-import-in-rails-on-heroku/