我正在开发一个仅向登录用户提供大型视频的应用程序。
为了保持这些视频的私密性,我将它们放在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
答案 0 :(得分:2)
我设法在Apache上激活X-Sendfile,而不是让Rails提供大文件。与Capistrano合作我找到了一个很好的解决方案。以下是Capistrano & X-Sendfile
的解释