在生产模式下使用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到正确的文件?
答案 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/;
}
有关详细信息,请参阅: