Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中类似热文件的文件托管服务_Ruby On Rails_Ruby_File Upload - Fatal编程技术网

Ruby on rails Rails中类似热文件的文件托管服务

Ruby on rails Rails中类似热文件的文件托管服务,ruby-on-rails,ruby,file-upload,Ruby On Rails,Ruby,File Upload,我工作的公司最近分配给我一项任务,为他们构建一个文件托管服务,该服务应与Hotfile/Mediafire/等类似。它需要具备所有功能,如普通用户的下载速度限制、高级用户的高速下载、下载前等待等 我面临的主要问题是如何限制普通用户的速度。我们有很多数据(大约30TB),每天上传的数据越来越多。存储这些文件并将其提供给用户的理想方式是什么 我想在RubyonRails中实现它,并计划使用曲别针、Mongoid和Nginx。你的问题很模糊。堆栈溢出不是为了帮助您设计站点,只是为了回答特定的技术问题。

我工作的公司最近分配给我一项任务,为他们构建一个文件托管服务,该服务应与Hotfile/Mediafire/等类似。它需要具备所有功能,如普通用户的下载速度限制、高级用户的高速下载、下载前等待等

我面临的主要问题是如何限制普通用户的速度。我们有很多数据(大约30TB),每天上传的数据越来越多。存储这些文件并将其提供给用户的理想方式是什么


我想在RubyonRails中实现它,并计划使用曲别针、Mongoid和Nginx。

你的问题很模糊。堆栈溢出不是为了帮助您设计站点,只是为了回答特定的技术问题。也就是说,我会这样做:

  • 将文件存储在非公共S3中(在任意时间戳/GUID下)
  • 高级用户可以通过有时间限制的签名链接直接访问S3上的文件(RoR进行身份验证,然后发送302重定向到签名链接)
  • 对于不是很高级的用户,他们将使用nginx代理到签名链接(他们从未看到实际的S3链接)
  • 使用X-Sendfile特性,这样Rails就可以在每次请求时“处于循环中”,但仍然可以将文件服务/代理卸载到nginx
  • 不同类别的用户将具有不同的内部位置,所有这些位置都代理到S3。RoR决定哪个类,然后将签名链接放入发送文件头中,以便nginx提供服务
  • 我不是回形针方面的专家,但除非它支持你正在做的事情,否则它可能会妨碍你的工作,而不是帮助你
  • 如果所有文件都是“公共”的,就不要麻烦将它们存储在数据库中。只要让nginx提供一个友好的错误页面,如果没有在S3中找到的话。(是的,您将无处对链接进行签名,这会占用一点CPU。但这将使您的数据库不会成为瓶颈。)

您开始的方法是错误的。您知道问题所在,不知道解决方案,但您需要提前决定语言甚至库。谁告诉你这些技术可能会帮助你解决这个问题?你应该先考虑一个解决方案,然后选择最好的技术/语言/工具来实现它。非常感谢你的回答。以后我会尽量提出更好的问题。