rails回退到资产管道

时间:2013-09-12 10:28:01

标签: ruby-on-rails nginx asset-pipeline unicorn

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

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

我将资产从asset.precompile中排除,然后启用

config.assets.compile = true

回归资产管道,为这一资产。

在我的本地生产环境中,everthing正在运行,但在我的服务器(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"

独角兽和rails不会显示任何错误。

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

最好的, 弗朗兹

1 个答案:

答案 0 :(得分:2)

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

以下是通过unicorn / UNIX-socket集成在/app中使用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,那么您应该很高兴。