如何设置Rubber + resque_web + nginx

时间:2012-06-27 17:29:29

标签: ruby-on-rails nginx resque

使用橡胶我用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时(橡胶添加到工具索引页面的链接只是/resque)。但是resque网页上的所有其他链接(包括任何CSS和.js文件)现在都被破坏了,因为这些链接不以resque/开头。换句话说,Working的链接仅为/working,但nginx需要/resque/working知道如何处理它。

我尝试过其他一些事情,例如摆脱重写并更改索引页面以指向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/resque/overview时,我收到了“Sinatra ... ditty”页面。

然后我重新加入了重写:

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网络服务器很好地协同工作?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

我昨天提交了一个pull request来为将来的用户解决此问题,但您可以将这些更改应用到您的项目中,一切都会对您有用。

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