2017-06-13 85 views
1

我正在構建一個使用Rails的客戶管理系統,該系統要求將包含客戶信息的CSV文件導入到/與Postgres數據庫進行比較。我在Heroku上託管應用程序。我使用Sidekiq將數據庫移動到了背景,但需要建議將文件上傳到導入的第一位。在S3上託管文件真的是最好的解決方案,還是沒有使用第三方存儲服務的簡單解決方案?該應用程序將每天使用,但最多有10名員工,上傳的大型CSV文件約爲100,000行。使用Rails,Postgres和Sidekiq導入CSV

謝謝。

回答

1

是的,我認爲S3是最好的解決辦法

我們在Storemapper面臨着同樣的問題(我們使用Resque代替Sidekiq,但是這不是一個問題)。這裏的限制因素是Heroku請求超時。你只有30秒才能完成你的上傳到Heroku,這會嚴重限制你的csv的大小。這是S3來的地方。基本上我們所做的是:

  1. 用戶通過javascript直接上傳csv到S3,繞過我們在Heroku上的應用服務器。

  2. 一旦上傳完成後,JavaScript卻使到應用服務器的請求將推出後臺工作,告訴工人所在的文件是在S3

  3. 工人下載從S3的CSV,然後將其處理爲必要

我發現carrierwave_direct寶石成爲步驟1和2對於步驟3非常有益的,我使用smarter_csv寶石。在這裏結帳我們的完整故事: https://tylertringas.com/very-large-csv-import-in-rails-on-heroku/

+1

非常感謝@ taufiq-muhammadi的迴應。我實際上已經在使用你和泰勒的故事了!這是我錯過了Javascript服務器旁路部分。我找到了一個[Heroku sourced explain](https://devcenter.heroku.com/articles/direct-to-s3-image-uploads-in-rails),它非常有用,並使用JqueryFileUpload而不是carrierwave_direct。作爲獎勵,它概述了一個很好的CSS進度條,以及文件上傳。再次感謝! – crmmmc

+0

不錯!我不知道JQueryFileUpload。很高興它成功了! –

+0

嘿@Taufiq,你能回答我的問題嗎?在Storemapper的故事中,Tyler提到「從s3獲取文件並處理它。」我使用AWS/S3 API來訪問文件,但是我應該直接從S3訪問它,還是將它保存在我的數據庫或應用程序中的某個位置,然後進行處理?就像現在一樣,我的工作人員正在從S3直接處理它,並且由於較大的文件而失敗。 – crmmmc