Rails3 + Nginx:使用send_file(m4v)提供文件

时间:2012-03-14 13:21:54

标签: ruby-on-rails-3 video nginx sendfile

我将Rails3与Nginx一起使用。

我通过控制器提供文件:上传动作。

class BannersController < ApplicationController
  ... # authentication
  def uploads
    send_file '{localFilePath}', :disposition => 'inline'
  end
end

我取消注释这一行

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
环境/ production.rb中的

我还在我的initializers / mime_types.rb中定义了一个mime类型'm4v'

Mime::Type.register "video/mp4", :m4v
MIME::Types.add(MIME::Type.from_array("video/mp4", %(m4v)))

我的nginx配置如下所示

http {
  ... # ruby-1.9.3-p0
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout  65;
  gzip on;
  server {
    client_max_body_size 30M;
    listen 80;
    server_name ...
    root ...
    passenger_enabled on;
    rails_env production;
    location ~ ^/(assets)/ {
      root ...
      gzip_static on;
      expires max;
      add_header Cache-Control public;
    }
  }
}

当我请求视频文件http:// {ip} / components / {id} /content/host_bg.m4v文件时,我在Chrome控制台中看到错误(单个请求产生4行) enter image description here

我该如何解决?我想我的nginx配置不完整。 请注意,我可以播放视频,但不能按预期播放(例如,javascript HTML5 jPlayer只能播放一次视频然后停止播放,重复播放来自其他http位置)。谢谢!

1 个答案:

答案 0 :(得分:0)

我添加了

passenger_set_cgi_param HTTP_X_ACCEL_MAPPING /var/www/=/files/;
location /files/ {
  internal;
  alias /var/www/;
}

到我的nginx conf文件,它可以正常工作。