我正在努力与send_file
使用rails 3.0.9运行ruby 1.9,在ubuntu lucid上运行apache 3.0.8
xsendfile模块已安装并加载到apache
root~# a2enmod xsendfile
Module xsendfile already enabled
在启用mods的
中正确符号链接lrwxrwxrwx 1 root root 32 Aug 8 11:20 xsendfile.load -> ../mods-available/xsendfile.load
config.action_dispatch.x_sendfile_header = "X-Sendfile"
已在我的production.rb
使用send_file导致将零字节文件发送到浏览器
filepath = Rails.root.join('export',"#{filename}.csv")
if File.exists?(filepath)
send_file filepath, :type => 'text/csv'
end
答案 0 :(得分:11)
我认为前面的答案不是正确的方法,因为据我所知,当应用此解决方案时,Apache根本不处理下载,而是使用rails进程。这就是为什么nginx指令看起来不行的原因。通过注释掉config指令可以得到相同的结果。
另一个缺点(除了将rails进程占用太长时间)是当rails进程处理数据流时,响应似乎没有发送内容长度头。因此,用户不知道他们下载的文件有多大,也不知道需要多长时间(可用性问题)。
我能够通过确保mod_sendfile被正确包含并加载到我的apache配置中来实现它(就像这样取决于你的apache安装等):
LoadModule xsendfile_module /usr/lib64/httpd/modules/mod_xsendfile.so
...
# enable mod_x_sendfile for offloading zip file downloads from rails
XSendFile on
XSendFilePath /