ruby-on-rails – 资产不适用于RoR 4,Nginx,Unicorn

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 资产不适用于RoR 4,Nginx,Unicorn前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我使用Capistrano 2,Unicorn,Nginx部署了我的RoR 4应用程序.
问题是我获得404资产(样式表,javascripts).

这是Nginx访问日志:

  1. 89.0.40.233 - - [16/Mar/2014:08:24:26 +0000] "GET /stylesheets/application.css HTTP/1.1" 404 650 "http://host.cloudapp.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/33.0.1750.149 Safari/537.36"
  2. 89.0.40.233 - - [16/Mar/2014:08:24:26 +0000] "GET /javascripts/application.js HTTP/1.1" 404 650 "http://host.cloudapp.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/33.0.1750.149 Safari/537.36"

我的资源位于app文件夹中:

  1. azureuser@host:~/apps/testify/current/public$ls -a assets
  2. . application-d65a0eaefe6ca2eef9400045f94ab52b.js
  3. .. application-d65a0eaefe6ca2eef9400045f94ab52b.js.gz
  4. application-71e2591e9586afebf3fb4ff70aaae199.css manifest-a348973e84698f7d898e8021bd6e5388.json
  5. application-71e2591e9586afebf3fb4ff70aaae199.css.gz

我的Nginx配置:

  1. upstream unicorn {
  2. server unix:/tmp/unicorn.testify.sock fail_timeout=0;
  3. }
  4. server {
  5. listen 80 default deferred;
  6. root /home/azureuser/apps/testify/current/public;
  7. location ^~ /assets/ {
  8. expires max;
  9. add_header Cache-Control public;
  10. }
  11. try_files $uri/index.html $uri @unicorn;
  12. location @unicorn {
  13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14. proxy_set_header Host $http_host;
  15. proxy_redirect off;
  16. proxy_pass http://unicorn;
  17. }
  18. error_page 500 502 503 504 /500.html;
  19. client_max_body_size 4G;
  20. keepalive_timeout 10;
  21. }

我从哪里开始看?

最佳答案
从access.log看来,你刚刚在你的布局中硬编码了application.css / .js.生产公用文件夹中没有此类文件,因为资产管道给出了它们的指纹名称(请查看示例ls输出).

你可能会读到这个here.

解决问题非常简单.使用以下代码替换application.css / .js的硬编码链接

  1. <%= javascript_include_tag "application" %>
  2. <%= stylesheet_link_tag "application" %>

猜你在找的Nginx相关文章