处理Heroku Worker Dyno上的文件

时间:2014-01-20 16:03:43

标签: ruby-on-rails heroku delayed-job worker

在我正在构建的RoR应用程序中的某一点上,管理员可以上传需要处理的(相对较小的)文件(这需要相对长的时间)。由于这个应用程序在Heroku上运行,我想处理一个工作器dyno上的处理,以免绑定web dyno。我们使用delayed_job gem进行排队。

想知道最好的方法是做什么 - 我考虑过几个通用解决方案:

  • 将文件上传到S3并让工作人员从S3获取它。缺点:出于各种原因,我宁愿不添加S3依赖项,而且在处理之后我们也不会保留文件。

  • 将文件读取为字符串,然后在作为参数传递给延迟方法时,由delayed_job放入数据库。然后,处理作业可以将其转换回所需的格式。

第二种解决方案有任何缺点吗?它似乎可以工作,但不确定它是否理想。还有其他推荐的办法吗?

1 个答案:

答案 0 :(得分:1)

您有两种选择:像S3这样的文件存储或数据库。

在S3上存储文件既便宜又可靠。有一个内置协议,用于将URL传递到前端Web进程和后端工作程序之间的文件。我强烈推荐这个。

您还可以将文件内容存储在Postgres或Redis等数据库中,您的前端Web进程和后端dynos都可以访问这些数据库。数据库是通用引擎,通常是存储文件的更昂贵的地方。这也行,但我不推荐。