postgresql - 使用 Rails、Postgres 和 Sidekiq 导入 CSV

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

我正在使用 Rails 构建一个客户管理系统,该系统需要将包含客户信息的 CSV 文件导入 Postgres 数据库或与 Postgres 数据库进行比较。我在 Heroku 上托管应用程序。我使用 Sidekiq 将数据库移至后台,但需要有关首先将文件上传到何处以进行导入的建议。将文件托管在 S3 上真的是最好的解决方案,还是有不使用第三方存储服务的更简单的解决方案?该应用程序将每天使用,但最多有 10 名员工,正在上传的大型 CSV 文件大约有 100,000 行。

谢谢。

最佳答案

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

我们在 Storemapper 遇到了同样的问题(我们使用 Resque 而不是 Sidekiq,但这不是问题)。这里的限制因素是 Heroku 请求超时。您只有 30 秒的时间来完成向 Heroku 的上传,这对您的 csv 的大小设置了硬性限制。这就是 S3 的来历。基本上我们所做的是:

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

  2. 上传完成后,javascript 向将启动后台工作程序的应用服务器发出请求,告诉工作程序文件在 S3 中的位置

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

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

关于postgresql - 使用 Rails、Postgres 和 Sidekiq 导入 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44530912/

相关文章:

django - 在 Windows 中为 django 安装 postgresql

python - 我在范围内时收到 IndexError

heroku 运行 rake 任务来下载文件

api - 我可以从 Heroku Postgres 备份主键吗?

php - Laravel 的中间件顺序(Middleware Priority)。使用 Postgres 的 Multi-Tenancy

python - Django 查询集优化 : Reverse lookup on _set with filter

python - 如何在python中动态生成mysql ON DUPLICATE UPDATE

javascript - 在 RAILS 3.1 中的 js Assets 上设置 Cache-Control header

mysql - 在 postgres 中复制 MySQL yearweek 函数

csv - 无法合并节点错误 : Neo4j