我正在使用Rails api和一个angularjs前端,它只是作为public
目录下的静态文件提供服务。 我select乘客作为应用程序服务器,部署到heroku和似乎一切工作正常,除了caching。
由于静态资产是由乘客/ nginx服务的,我相信这与轨道无关。 但是我不知道如何让它工作或者在哪里添加configuration。
请求静态文件时的响应头( application-a24e9c3607.js ):
Connection: keep-alive Content-Length: 0 Date: Thu, 14 Jan 2016 06:45:31 GMT Etag: "5696ce02-43102" Last-Modified: Wed, 13 Jan 2016 22:21:54 GMT Server: nginx/1.8.0 Via: 1.1 vegur
我能够这样解决:
创建nginx.conf.erb文件:
cp $(passenger-config about resourcesdir)/templates/standalone/config.erb nginx.conf.erb
在nginx.conf.erb中的 server
块内部, server
Nginx在资产目录下的文件被请求时生成适当的头文件:
server { # .... location ~* ^/assets/ { # Per RFC2616 - 1 year maximum expiry expires 1y; add_header Cache-Control public; # Some browsers still send conditional-GET requests if there's a # Last-Modified header or an ETag header even if they haven't # reached the expiry date sent in the Expires header. add_header Last-Modified ""; add_header ETag ""; break; } }
在Procfile中将Nginx引擎选项传递给乘客:
web: bundle exec passenger start -p $PORT --max-pool-size 3 --nginx-config-template nginx.conf.erb