2013-09-11 3 views
2

Я смущаюсь о своей проблеме с X-Sendfile, NGinx и Rails. Я прочитал несколько документов и руководств, но я просто не понимаю.X-Sendfile, Rails & Nginx

Что бы я ни пытался, я получаю 404. Вот часть X-Sendfile NGINX.

location/{ 
        proxy_set_header X-Sendfile-Type X-Accel-Redirect; 
        proxy_set_header X-Accel-Mapping /var/www/cube_storage/uploads/=/cdn; #maps a real path to the internal location 
        ... 
      } # end of location app 

      location /cdn { 
        root /var/www/cube_storage/; 
        internal; 
        proxy_set_header X-Sendfile-Type X-Accel-Redirect; 
        proxy_set_header X-Accel-Mapping /var/www/cube_storage/=/cdn/; 
        } 

X-Accel-Redirect включен в моих рельсах приложении:

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

Вот код контроллера, который отвечает за обслуживание файла:

def image 
@activity = AccountActivity.where(:id => params[:id]).first 

if [email protected] || [email protected]_attachment_is_image? || @activity.file_attachment_name != requested_file_name() 
    l = Logger.new("#{Rails.root}/logs/cdn_activity.log") 
    l.info(params.inspect) 

    render :file => "#{Rails.root}/public/404.html", :layout => false, :status => :not_found 
else 
    begin 
    if !params[:version] || params[:version] == "original" 
     t = @activity.file_attachment # thats the original image! 
    else 
     t = @activity.file_attachment.send(params[:version]) 
    end 

    send_file t.current_path ,:disposition => 'inline' 
    rescue Exception => ex 
    l = Logger.new("#{Rails.root}/logs/cdn_activity.log") 
    l.info("--------------------------") 
    l.info(Time.now.to_s) 
    l.info("exception -> #{ex.message}") 
    l.info("params: #{params.inspect}") 
    render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found 
    end 

end 

конца

Я использую несущую волну как двигатель хранения. Может быть, кто-то просто видит мою ошибку, но я даже не пробовал несколько часов.

Еще одна вещь, запрос даже не отображается в development.log (да, я активировал X-Accel для dev тоже).

С уважением, Алекс

ответ

4

получил это: никогда не используйте рельсы маршрута часть в вашем месте директивы Nginx. с этим, он работает:

location/{ 
    proxy_set_header X-Sendfile-Type X-Accel-Redirect; 
    # Maps a real path to the internal location 
    proxy_set_header X-Accel-Mapping /var/www/cube_storage/uploads/=/downloads; 

} # end of location app 

location /downloads { 
    alias /var/www/cube_storage/uploads/; 
    internal; 
} 
+0

Для более углубленного руководства: [проверить этот блог] (http://thedataasylum.com/articles/how-rails-nginx-x-accel-redirect-work- together.html) –

 Смежные вопросы

  • Нет связанных вопросов^_^