【问题标题】:Get rails server port through load balancer通过负载均衡器获取 Rails 服务器端口
【发布时间】:2015-02-19 20:31:11
【问题描述】:

最终目标:我正在尝试获取 Ruby on Rails 端口

我使用nginx 作为负载平衡器,在我使用thin 运行的rails 服务器上的几个不同的ruby 之间进行切换。

我跟着this tutorial 弄清楚如何将proxy_pass 传递到不同的服务器,但我想看看它是否确实有效。我能确定这是否有效的唯一方法是查看运行瘦服务器的端口。

我无法使用request.port,因为请求实际上是通过nginx路由的,因此每个请求端口都有80。当我需要真正运行 rails 服务器的端口时。

根据this answer,我尝试过使用:

Rails::Server.new.options[:Port]

在开发模式下工作很好,但是当切换到生产模式时,它给了我一个500

FATAL -- : ActionView::Template::Error (uninitialized constant Rails::Server)

nginx 配置

server_name myname.com;

upstream dashboard_servers {
  server <hidden>:3001 fail_timeout=0;
  server <hidden>:3002 fail_timeout=0;
  server <hidden>:3003 fail_timeout=0;
  server <hidden>:3004 fail_timeout=0;
}

server {
  listen 3000;

  location / {
    # set proxy headers
    proxy_set_header    Host $host;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://dashboard_servers;
  }
}

我的 Rails 服务器在端口 3001-3004 上,这是我需要的端口。

如何获取 Rails 服务器真正运行的端口?

【问题讨论】:

  • 只是为了确保 nginx 和所有 ruby​​ 服务器都在同一台服务器上工作?请澄清设置
  • 它们确实在同一台服务器上运行。

标签: ruby-on-rails ruby nginx


【解决方案1】:

好吧,如果您尝试在 rails 控制台中运行该命令,我认为这就是它给您该错误的原因,因为没有端口,我只是通过在我的布局中添加该行来在本地测试它并且效果很好

【讨论】:

  • 不幸的是,它不是通过控制台......是通过我的 URL 从控制器调用它
  • 感谢您的帮助,感谢 Mohammad。但是,我很遗憾地说,我已经尝试过那里的解决方案:(
  • 你可以为负载均衡器添加你的 nginx 配置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多