Setting headers in sent_file response

I’m having trouble playing a video from my site on the iphone using
send_file. It seems that I’m missing the Accept-Ranges header in my
response. How can I set the Accept-Ranges header in my send_file
response?

I actually was able to edit the source of rails to get this
implemented:

vendor/rails/actionpack/lib/action_controller/streaming.rb

def send_file_headers!(options)
options.update(DEFAULT_SEND_FILE_OPTIONS.merge(options))
[:length, :type, :disposition].each do |arg|
raise ArgumentError, “:#{arg} option required” if
options[arg].nil?
end

    disposition = options[:disposition].dup || 'attachment'

    disposition <<= %(; filename="#{options[:filename]}") if

options[:filename]

    headers.update(
      'Content-Length'            => options[:length],
      'Content-Type'              => options[:type].to_s.strip,  #

fixes a problem with extra ‘\r’ with some browsers
‘Content-Disposition’ => disposition,
‘Content-Transfer-Encoding’ => ‘binary’
)

    headers.update('Accept-Ranges' => options['Accept-Ranges']) if

options[‘Accept-Ranges’]

    # Fix a problem with IE 6.0 on opening downloaded files:
    # If Cache-Control: no-cache is set (which Rails does by

default),
# IE removes the file it just downloaded from its cache
immediately
# after it displays the “open/save” dialog, which means that
if you
# hit “open” the file isn’t there anymore when the application
that
# is called for handling the download is run, so let’s
workaround that
headers[‘Cache-Control’] = ‘private’ if headers[‘Cache-
Control’] == ‘no-cache’
end

And I send my file like this:

send_file path, :disposition => ‘inline’, :type => m_type, ‘Accept-
Ranges’ => ‘bytes’

In retrospect this was dumb because mongrel doesn’t even support byte-
range requests…