用于rails subdir部署的nginxconfiguration

我在configurationnginx服务我的Rails应用程序的静态文件时遇到了一些麻烦, 我是指应用的public/文件夹中的所有文件,而不仅仅是Rails资产pipe道中的文件。 看来我能够把事情做大部分工作,但我不知道如何把所有东西放在一起。 我的应用程序安装在服务器( /dashboard )的子目录中,而不是Web根目录。

这里是我的各种configuration文件的摘录:

config.ru

 map Dashboard::Application.config.relative_url_root || "/" do run Rails.application end 

environments / production.rb

 config.relative_url_root = "/dashboard" config.assets.prefix = "/dashboard/assets/" 

nginx.conf

 location /dashboard/ { root /srv/XXX/dashboard/public; location /dashboard/assets/ { gzip_static on; expires max; add_header Cache-Control public; } try_files $uri @unicorn; error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 10; } location @unicorn { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unicorn_server; } upstream unicorn_server { server unix:/srv/XXX/dashboard/tmp/sockets/unicorn.sock fail_timeout=0; } 

通过这个configuration,我可以使用独angular兽public/assets/文件夹内的文件使用nginx来为Rails应用程序本身服务,但public/文件夹中的其余文件被路由到Rails,并最终返回404状态码。 我知道这是因为服务器正在寻找(例如) public/文件夹中不存在的/dashboard/robots.txt 。 我相信我需要使用alias来操纵path,但是我没有能够把所有的东西放在一起,让Rails正确地为应用程序和nginx提供静态文件。