Nginx无法在Rails 3中提供静态资源服务

6

大家好,我遇到了Rails nginx配置的问题。我的应用是一个Rails 3.0.12版本,对于nginx还比较新手。

我似乎无法让nginx提供静态资源。对于/public文件夹中的每个请求,我都会收到404错误。 我将目前的nginx配置发布在下面,也许我错过了什么。

nginx.conf:

user rails;
worker_processes  1;
daemon off;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
  worker_connections  2048;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  access_log  /var/log/nginx/access.log;

  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;

  keepalive_timeout  65;

  gzip  on;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_proxied any;
  gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

  server_names_hash_bucket_size 64;

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}

sites-enabled/project.conf:

upstream project {
  # fail_timeout=0 means we always retry an upstream even if it failed
  # to return a good HTTP response (in case the Unicorn master nukes a
  # single worker for timing out).

  # for UNIX domain socket setups:
  server unix:/tmp/project.socket fail_timeout=0;
}

server {
  listen 80;
  root /srv/www/project/current/public;
  passenger_enabled on;
  server_name dev.project.eu;
  server_name *.dev.project.eu;

  location / {
      #all requests are sent to the UNIX socket
      proxy_pass  http://project;
      proxy_redirect     off;

      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

      client_max_body_size       10m;
      client_body_buffer_size    128k;

      proxy_connect_timeout      90;
      proxy_send_timeout         90;
      proxy_read_timeout         90;

      proxy_buffer_size          4k;
      proxy_buffers              4 32k;
      proxy_busy_buffers_size    64k;
      proxy_temp_file_write_size 64k;
      root /srv/wwww/project/current/public;
    }

}

我尝试从 project.conf 中删除 location / 块,但是没有任何效果,资产仍然不可见。
我也知道Rails中的serve_static_assets开关,但我更希望nginx提供这些资产,因为它应该这样做。
2个回答

6
您需要添加类似于以下内容(有关位置的文档):文档
location / {
  try_files $uri @ruby;
}

location @ruby {
    proxy_pass  http://project;
}

0

我知道这个帖子已经超过一年了,但我在生产环境中遇到了同样的问题。

让它对我起作用的是运行:

rake assets:precompile

正在开发中,取消注释

load 'deploy/assets'

尽管我正在使用Rails 4。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接