将服务器端口置于Controller外部

时间:2014-01-24 07:09:29

标签: ruby-on-rails

我想从第三方应用程序向我的Rails服务器注册一个回调URL,并在启动时执行此注册,以便我可以开始捕获通知。

at this question and the answers我看到的建议如下:

class SomeController < ApplicationController
  def some_action
    raise "I'm running on port #{request.port}."
  end
end

这不好,因为我不在控制器中。接下来是:

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

但是,我从我的代码和rails console

中收到此错误
NoMethodError: undefined method 'Server' for Rails::Module

我使用Socket.gethostname成功获得了主机名,但如何获取端口号?

1 个答案:

答案 0 :(得分:1)

您无法访问request.port的原因是请求对象与客户端请求相关联,该请求仅在您查看特定请求时才存在。您想要的是访问Web服务器配置。这完全是另一回事。

您可以通过访问包含执行ruby代码的进程的pid的应用程序范围的$$变量来查找Web服务器的pid。然后,您可以查找此进程使用的端口。您可以使用执行外部应用程序的system命令来实现此目的。这是一篇文章,解释了如何识别属于某个流程的端口:

http://www.cyberciti.biz/faq/what-process-has-open-linux-port/

当只有一个进程运行整个应用程序时,这将起作用。当使用thin和nginx的组合时,这不会起作用,因为运行代码的进程不是运行Web服务器的进程。