我知道rails3移动到基于异步send_file的机架中间件。对于我的用例,我需要执行同步阻塞sendfile。你如何在Rails3中做到这一点?
class SomeControlle
def send_it
Foo.prepare_file do |f|
send_file f # I want this to be blocking
end
end
end
class Foo
def self.prepare_file(&block)
create tmp file
yield file
ensure
unlink tmp file
end
end
更新:
使用Amadan提供的链接,我现在能够以阻止的方式将文件发送到浏览器。我的最后一个障碍是弄清楚为什么文件大小在我的prod env中显示为-1字节,但在本地显示正确的文件大小。
我现在拥有的:
DocProcessor.new().prepare_for_download(@file) do |f|
# send_file f
response.headers['Content-Type'] = @file.content_type
response.headers['Content-Disposition'] = "attachment; size=\"#{@file.file_size}\"; filename=\"#{@file.original_filename}\""
render :text => open(f, 'rb').read
end
知道为什么下载中的文件大小会显示-1个字节?