【问题标题】:rails fallback to assets pipelinerails 回退到资产管道
【发布时间】:2013-09-16 16:36:49
【问题描述】:

我正在尝试将 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 不会显示任何错误。

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

最好, 弗朗茨

【问题讨论】:

  • 能否发布您收到的任何错误消息?
  • 我添加了错误日志
  • 你确定请求甚至到达了 Rails 吗?在我看来 nginx 正在尝试提供静态资产但没有找到它。

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


【解决方案1】:

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

以下是通过 unicorn/UNIX-socket 集成与 nginx 一起使用 /app 的 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,您应该可以继续使用。

【讨论】:

  • 谢谢,这正是我想要的。我的 proxy_pass 配置搞砸了。
猜你喜欢
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
相关资源
最近更新 更多