Hegwin.Me

南朝四百八十寺,多少楼台烟雨中。

Nginx部署时Assets静态文件请求的配置

将Rails项目部署到production环境时,在asset方面遇到的问题似乎不少。

现在你们看到的Hegwin.me是用Nginx和Thin部署的,因为也没有太多机会要部署,所以我基本上都是手动来的。可是在执行完 RAILS_ENV=production bundle exec rake assets:precompile,并且以production模式启动时,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;
}

至此,问题也就解决了。

Tags:

Posted on: 2013-11-20

Back