2

使用 Rubber,我使用 resque 和 redis 硫化了我现有的项目。我把它全部部署好了。点击 web_tools 索引会显示一个 Resque 链接。但是点击它给了我一个404。

我认为 nginx 不知道如何处理“/resque”,所以我添加了文件config/rubber/role/web_tools/resque-nginx.conf

<% if resque_host = rubber_instances.for_role('resque_web').first %>

  <%
    @path = "/etc/nginx/rubber/tools/resque.conf"
  %>

  location /resque
  {
    proxy_pass http://<%= resque_host.full_name %>:<%= rubber_env.resque_web_port %>;
  }

<% end %>

本质上是从同一目录复制 haproxy-nginx.conf 文件。

我的第一个问题是- 为什么我需要这样做?硫化应该这样做还是我已经做错了什么?

继续。这个 nginx 配置不起作用。但是我走得更远了,至少我现在正在访问 WEBrick 服务器。我有一个页面说:

Sinatra doesn’t know this ditty.

所以我改变了我的配置,认为 Resque 的 WEBrick 服务器不知道 /resque 是什么:

location /resque
{
  rewrite ^/resque/(.*) /$1 break;
  proxy_pass http://<%= resque_host.full_name %>:<%= rubber_env.resque_web_port %>;
}

这有效,但前提是我手动转到https://myhost.com/resque/overview(Rubber 添加到您的工具索引页面的链接只是/resque)。但是 resque 网页上的所有其他链接(包括任何 CSS 和 .js 文件)现在都已损坏,因为这些链接没有以resque/. 换句话说,Working 的链接只是,/working但它需要/resque/working让 nginx 知道如何处理它。

我已经尝试过其他方法,例如摆脱重写并更改索引页面指向,resque/overview但这仍然给了我“Sinatra 不知道这个小调”页面。

我试过了:

location /resque
{
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_redirect off;
  proxy_pass http://<%= resque_host.full_name %>:<%= rubber_env.resque_web_port %>;
}

当我点击/resque或时,我得到“Sinatra...ditty”页面/resque/overview

然后我将重写添加回:

location /resque
{
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_redirect off;
  rewrite ^/resque/(.*) /$1 break;
  proxy_pass http://<%= resque_host.full_name %>:<%= rubber_env.resque_web_port %>;
}

这与没有所有代理调用的结果相同。

有谁知道如何让 nginx 和 Resque Web 服务器很好地协同工作?

4

1 回答 1

3

哇,真是巧合。我正在努力从 Rubber 1.15 -> 2.0.5 升级我们的应用程序,昨天我遇到了这个问题!

rubber vulcanize resque的,应该注意这一点,但显然没有人编写 Nginx 代理配置。

您在 Nginx 的第一次尝试几乎是正确的做法。

CSS、图像和链接损坏的原因是 resque-web 正在寻找与 resque-web 应用程序的根相关的所有内容。您需要更改 resque-web Rack 文件 (/config/resque-web.ru) 以在 /resque 的子目录中启动应用程序。这样,一切都是相对的(/resque/overview 等)并且没问题。

我昨天提交了一个拉取请求来为未来的用户解决这个问题,但是你可以将这些更改应用到你的项目中,一切都会为你工作。

如果这不起作用,请告诉我。

于 2012-06-28T07:01:25.970 回答