使用Nginx时的Gem资产文件

时间:2016-11-08 03:26:19

标签: ruby-on-rails nginx

在生产模式下使用Nginx后,我使用的几个宝石的资产文件都没有加载。我非常肯定它与我的Nginx配置中的位置块有关,但我不确定要添加什么,以便Nginx指向文件所在的位置。

有问题的宝石是sidekiq和rack-mini-profiler

upstream cable {
  server unix:///tmp/cable.sock;
}

server {
  listen 80;
  server_name 66.207.0.133;
  root /home/john/rails/cable/public/assets;

  location / {
    proxy_pass http://cable;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location ~* \.(css|js|otf|woff|ttf|svg|eot)$ {
    root /home/john/rails/cable/public/;
  }

}

Nginx日志中的错误是:

2016/11/07 21:04:36 [error] 22745#22745: *51175 open() "/home/john/rails/cable/public/sidekiq/javascripts/dashboard.js" failed (2: No such file or directory), client: 69.49.80.136, server: 66.207.0.133, request: "GET /sidekiq/javascripts/dashboard.js HTTP/1.1", host: "66.207.0.133", referrer: "http://66.207.0.133/sidekiq"

显然,第二个位置块将所有对所需.js和.css文件的请求重定向到错误的位置,但是如何以及在哪里可以将请求重定向到/sidekiq/*.js到正确的文件?

1 个答案:

答案 0 :(得分:2)

首先需要find文件系统中的正确文件。

find / -path "*/javascripts/dashboard.js"

网络搜索显示它可能是/home/site/homepage_production/shared/bundle/ruby/1.9.1/gems/sidekiq-2.16.1/web/assets/javascripts/dashboard.js

因此,如果您必须在网络上/sidekiq/javascripts/dashboard.js提供服务,并且/sidekiq/内的所有请求都是静态资产,则应使用以下内容:

location ^~ /sidekiq/ {
    alias /home/site/homepage_production/shared/bundle/ruby/1.9.1/gems/sidekiq-2.16.1/web/assets/;
}

有关详细信息,请参阅: