1

我将 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 中。

我还在我的初始化程序/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 行) 在此处输入图像描述

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

4

1 回答 1

0

我添加了

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

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

于 2012-03-14T17:01:10.090 回答