Nginx部署时Assets静态文件请求的配置
Handle Assets with Nginx Instead of Thin
将Rails项目部署到production环境时,我在 assets 方面遇到了不少问题。
现在你们看到的Hegwin.me这个博客,我是使用 Nginx 和 Thin 作为服务器部署的。因为部署的频率并不高,所以我基本上都是手动来部署的。在我部署的过程中,当我执行完 RAILS_ENV=production bundle exec rake assets:precompile
,并且以production模式启动server后,对 assets(CSS,JS还有图片)的请求,返回的结果全是404 Not Found。
我觉得很不可思议,为什么我使用Unicorn的时候没遇到这种情况呢?
在我的 production 配置下有这么一段:
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
将这里的false改为true也能解决问题,可是这些静态文件还是用Apache或者Nginx来做比较好。
在Rails Guide的 The Asset Pipeline里面写了如何用Nginx去管理,需要在Nginx配置中加上这一段:
location ~ ^/assets/ {
expires 1y;
add_header Cache-Control public;
add_header ETag "";
break;
}
我把这段复制粘贴之后依然不对,继续返回404。
而后,我在网上搜了之后,看到有的人的解决方式是加入在location配置里加进root来指定public路径,即
location ~ ^/assets/ {
expires 1y;
add_header Cache-Control public;
root /srv/blog/public;
add_header ETag "";
break;
}
至此,问题也就解决了。