2011-08-28 17 views
5

Tôi đã thiết lập một môi trường sản xuất chạy Rails 3.1.0rc6, Thin và Nginx.Rails bỏ qua config.action_dispatch.x_sendfile_header? Sử dụng Thin + Nginx

Vì một số lý do, có đặt config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" trong config/environments/production.rb, Rails dường như đã hoàn toàn bỏ qua nó; nội dung không được phân phát và tiêu đề phản hồi cho một tệp như sau:

Server: nginx/1.0.5 
Date: Sun, 28 Aug 2011 00:26:08 GMT 
Content-Type: image/png 
Content-Length: 0 
Cache-Control: no-cache 
Last-Modified: Sat, 27 Aug 2011 23:47:35 GMT 
Etag: "af4810c52cb323d9ed061d1db5b4f296" 
X-UA-Compatible: IE=Edge,chrome=1 
X-Sendfile: /var/www/***/app/assets/images/bg-linen-light.png 
X-Runtime: 0.004595 
X-Content-Digest: da39a3ee5e6b4b0d3255bfef95601890afd80709 
Age: 0 
X-Rack-Cache: stale, valid, store 

200 OK 

Vì vậy, dường như Rails vẫn đang đặt tiêu đề . Tôi đã cố gắng thêm dòng sendfile_header để config/application.rb, nhưng tôi đoán nó đang được overriden hoặc bỏ qua là tốt.

tập tin của tôi yml cho Thin:

--- 
chdir: /var/www/*** 
environment: production 
address: 0.0.0.0 
port: 3000 
timeout: 30 
log: log/thin.log 
pid: tmp/pids/thin.pid 
max_conns: 1024 
max_persistent_conns: 512 
require: [] 

wait: 30 
servers: 1 
daemonize: true 

Nginx vhost:

upstream *** { 
    server 127.0.0.1:3000; 
} 

server { 
    listen 80; 
    server_name ***; 
    root /var/www/***/public; 
    index index.html; 

    location/{ 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 

     if (-f $request_filename/index.html) { 
      rewrite (.*) $1/index.html break; 
     } 

     if (-f $request_filename.html) { 
      rewrite (.*) $1.html break; 
     } 

     if (!-f $request_filename) { 
      proxy_pass http://***; 
      break; 
     } 
    } 
} 

Tôi đã cố gắng /etc/init.d/thin stop sau đó bắt đầu lại một vài lần, không có kết quả.

Trả lời

3

tôi tình cờ này trong production.log:

Started GET "/assets/bg-linen-light.png" for ***** at 2011-08-28 11:04:42 +0400 
Served asset /bg-linen-light.png - 304 Not Modified (102ms) 

Vấn đề là trình duyệt đã yêu cầu tập tin trướcx_sendfile_header được thay đổi với những gì nó phải được, vì vậy nó có vẻ như Rails (và/hoặc trình duyệt) hoàn toàn không có gì sau khi thay đổi biến.

Sự cố đã được giải quyết bằng cách truy cập rails console và nhập Rails.cache.clear. Một làm mới khó khăn sau đó giải quyết vấn đề!

Started GET "/assets/bg-linen-light.png" for ***** at 2011-08-28 11:06:06 +0400 
Served asset /bg-linen-light.png - 200 OK (4ms) 
Các vấn đề liên quan