6

Stackoverflowers。我的 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;
    }

}

我试过从 中删除location /project.conf,但它没有做任何事情,资产仍然不可见。

我也知道serve_static_assetsRails 中的 switch,但我宁愿让 nginx 为这些资产提供服务,因为它应该这样做。

4

2 回答 2

6

您需要添加类似的内容(关于位置的文档):

location / {
  try_files $uri @ruby;
}

location @ruby {
    proxy_pass  http://project;
}
于 2012-05-02T13:10:34.323 回答
0

我知道这个线程已经有一年多了,但我在生产中遇到了同样的问题

让它对我有用的东西是运行

rake assets:precompile

在开发中,并取消注释

load 'deploy/assets'

即使我使用的是rails 4。

于 2013-07-20T03:28:14.230 回答