1

我正在尝试将 rails4 (ruby-2.0.0) 应用程序部署到我的服务器。我几乎所有的资产都是预编译的,并由 nginx 提供服务。

一个 js.erb 通过从我的数据库中获取模型来生成动态 html 列表。此资产无法预编译,因为它必须保持动态。

我从asset.precompile中排除了这个资产,并打开了

config.assets.compile = true

回退到资产管道,对于这一资产。

在我的本地生产环境中,一切正常,但在我的服务器(nginx、unicorn)上,资产管道回退将不起作用。我收到一个简单的 404 错误

nginx错误日志:

 2013/09/13 08:54:54 [error] 27442#0: *58 open() "/XXX/current/public/assets/rails_admin/rails_admin_switchable-051203ae1d7aca2c08092e5c92bcdf15.js" failed (2: No such file or directory), client: XXX, server: , request: "GET /assets/rails_admin/rails_admin_switchable-051203ae1d7aca2c08092e5c92bcdf15.js HTTP/1.1", host: "XXX", referrer: "http://XXX/admin"

unicorn 和 rails 没有显示任何错误。

任何想法,我该如何解决这个问题?

最好的,弗朗茨

4

1 回答 1

2

看起来您的 nginx 服务器定义未与您的应用服务器正确集成。它应该配置为将与物理文件不匹配的请求传递到应用服务器。

/app这是通过 unicorn/UNIX-socket 集成与 nginx 一起使用的 rails 应用程序的标准配置:

  upstream app_server {
    server unix:/tmp/nginx.socket fail_timeout=0;
   }

  server {
    listen <%= ENV["PORT"] %>;
    server_name _;
    keepalive_timeout 5;

    # path for static files
    root /app/public;

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://app_server;
    }

    # Rails error pages
    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /app/public;
    }
  }

如果您的资产管道编译为/app/public/assets您应该很高兴。

于 2013-09-13T18:06:48.180 回答