Rails提供大型文件

时间:2014-02-28 15:57:31

标签: ruby-on-rails video ruby-on-rails-4 video-streaming rack

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

为了保持这些视频的私密性,我将它们放在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。

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

我在这里找到的唯一问题是没有答案serving large media files from the assets folder in rails

1 个答案:

答案 0 :(得分:2)

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

的解释