2012-09-30 60 views
3

我通過啓用資產管道的Capistrano部署了一個Rails 3.2.8應用程序到我的Linode服務器。未提供JS和CSS的Rails/Nginx

它運行nginx +獨角獸。

當我訪問我的應用程序時,雖然資產存在於<RAILS_DIR>/public/assets中,但最小化的JS和CSS未被提供。

$ tree assets 
assets 
|-- application-66e477d6fd8cf088e8be44affeead089.css 
|-- application-66e477d6fd8cf088e8be44affeead089.css.gz 
|-- application-7d3ead38a0b5e276a97d48e52044ac31.js 
|-- application-7d3ead38a0b5e276a97d48e52044ac31.js.gz 

在我的應用程序,我可以看到沒有發現這些精確的文件:

error

這是我的nginx的配置:

server { 
    listen 80 default deferred; 
    server_name me.example.com; 
    root /home/kennym/apps/app/current/public; 

    location ^~ /assets/ { 
    add_header Last-Modified ""; 
    add_header ETag ""; 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 

    try_files $uri/index.html $uri @unicorn; 
    location @unicorn { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass http://unicorn; 
    } 

    error_page 500 502 503 504 /500.html; 
    client_max_body_size 4G; 
    keepalive_timeout 10; 
} 

你能猜到是什麼錯誤?

回答

6

location ^~ /assets/應該是location ~ ^/assets/

前者是不匹配/資產/,後者是與/資產開始的圖形/

更新你的nginx的配置可以讓服務工作再次緩存和預gzip壓縮的文件相匹配。

+0

感謝您發現這個錯字 - 它現在可以正常工作。 :-) –

2

我通過註釋nginx.conf中的location ^~ /assets/塊來解決這個問題。

+2

只有當你想要rails服務器來處理靜態文件而不是nginx時,這是可以的。如果這只是你正在使用它的那種,那麼nginx的目的就會失敗。 –

+0

同意...這是一種黑客。 –

0

對於那些有同樣問題的人,對我來說,解決方案是進入/etc/nginx/conf.d/default.conf並正確設置root字段。

相關問題