2009-06-05 17 views
11

Diyelim ki, Ragin 2.3.2 uygulama nginx tarafından önlenmiş ve Rails aracılığıyla büyük bir statik dosyaya hizmet vermem gereken mongrel tarafından servis verdiğimi varsayalım.). Rails uygulamasının mongrel örneğini engellememek için dosyanın aktarımını nginx'e devretmesini istiyorum.Radarlar aracılığıyla Nginx aracılığıyla Büyük Dosya Sunumu 2.3 x-sendfile kullanma

Mevcut bilgiler çelişkili ve eksik görünüyor. This post, Apache ile nasıl yapılacağını gösterir ve ngninx ile de yapılabileceğini gösterir - ancak örnek yoktur. This post ve this post, Rails 2.3'in artık kullanılmayan bir eklentiyi kullanarak nasıl yapılacağını gösterir. This post belki de nginx ile x-sendfile için destek olmadığını gösterir.

Rayların artık kendi başlarına yapabileceği şeyler için eklentilerle uğraşmak istemem.

Hiçbir eklenti ve Rails 2.3/nginx/mongrel kullanarak çalışmak için herhangi bir kişi x-sendfile benzeri davranışlar kazanmış mı? Değilse, bir eklenti (ve/veya maymun) ve Rails 2.3/nginx/melez ile çalışmak için en iyi doküman nedir?

cevap

24

Ana fikir: tüm denetleyiciniz, nginx x-accel-redirect başlığını ayarlamaktır. Denetleyici yönteminiz döndüğünde (çok hızlı olacak), nginx Rails uygulamanızın başlığına bakacaktır. X-accel-yönlendirme ayarlanırsa, nginx statik dosyaya hizmet verir. hile yapmaz yalnız

def show 
    @attachment = Attachment.find(params[:id]) 
    # Do anything else you need for authentication, etc. 

    head(:x_accel_redirect => '/files/' + @attachment.filename, 
    :content_type => @attachment.content_type, 
    :content_disposition => "attachment; filename=\"#{@attachment.filename}\"") 
end 

Bu:

Kişisel denetleyicisi gibi bir şey olacaktır. Ayrıca, nginx'i $ RAILS_ROOT/files dosyasında bulunan dosyalar hakkında bilgilendirmeniz gerekir.

location /files { 
    root /path/to/rails_app; 
    internal; 
} 

$ RAILS_ROOT/dosyalar halinde statik dosyayı koyun ve çalışması gerekir: Sunucu blokunun içinde nginx config sonuna ekleyin. Plugins veya monkeypatching'e gerek yoktur. Rails 2.3.2 ve 2.3.14 ile test edilmiştir.

+2

Erkekler arasında bir şampiyonsunuz, bunun için teşekkürler. – hornairs

+1

Temiz! Basit ve doğrudan noktaya! –

+0

X-accel üzerinde Nginx referansı: http://wiki.nginx.org/X-accel –