Rails提供大型文件

我正在开发一个仅向登录用户提供大型video的应用程序。

为了保持这些video的私密性,我将它们放在Rails项目中的私有文件夹中,让Rails为它们提供服务,而不是使用公共文件夹并排除来自apache的请求(以避免直接链接到它们)。

我在控制器中的动作如下所示:

def video respond_to do |format| format.mp4{ send_file File.join([Rails.root, "private/videos", @lesson.link_video1 + ".mp4"]), :disposition => :inline, :stream => true } end end 

一切都很完美,但只有小文件,一旦我尝试使用真实文件我收到错误:

 NoMemoryError (failed to allocate memory) 

我在某个地方读到了将send_file用于大文件不是一个好习惯,但是使用其他方法,让apache为文件提供服务,我在向移动苹果设备提供文件时遇到了问题,因为他们没有发送HTTP_REFERER。

你知道这个内存限制有多小吗? 我的video从400MB到2GB(试图减少它们)。

我在这里找到的唯一问题是没有答案来处理rails中assets文件夹中的大型媒体文件

我设法在Apache上激活X-Sendfile,而不是让Rails提供大文件。 与Capistrano合作我找到了一个很好的解决方案。 这里解释了Capistrano和X-Sendfile的方式