Nginx:配置nginx以在生产中提供非预编译资产

时间:2012-10-09 21:41:39

标签: ruby-on-rails nginx assets unicorn

我有一个带有机车cms的rails应用程序。我希望能够通过我的CMS引用特定的css / js文件,并且能够使用像assets / subfolder / file.css这样的URL进行开发。当我使用nginx和unicorn将我的应用程序部署到服务器时,这些URL不再有效,并且我的所有图像都停止加载。将以下内容添加到我的nginx conf文件后,图像开始加载但CSS / JS文件仍无法正常工作。

root /var/www/myproject/public/;
location ~ ^/assets/ {
  expires 1y;
  add_header Cache-Control public;

  add_header ETag "";
  break;
}    

我需要配置什么才能让nginix和unicorn可以从app / assets / css或app / assets / javascript目录中提供资源?

1 个答案:

答案 0 :(得分:0)

希望你有一个很好的理由不想预编译资产,但这应该会有所帮助。

#{Rails.root}/config/environments/production.rb
config.serve_static_assets = true

默认情况下,在Rails.env == "production"时,Rails应用不会投放资源。在开发/测试环境中,Rails将处理对assets / subfolder / file.css的请求,并正确地从#{Rails.root}/app/assets/subfolder/file.css中呈现资产。

rake assets:precompile将生成的css / js文件放在#{Rails.root}/public/assets中,该文件将相对于nginx配置中的root位置正确解析。

在nginx配置中使用expires 1y;时,具有缓存副本的浏览器可能不会请求对引用的css / js文件所做的任何更改。