我想从第三方应用程序向我的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
成功获得了主机名,但如何获取端口号?
答案 0 :(得分:1)
您无法访问request.port
的原因是请求对象与客户端请求相关联,该请求仅在您查看特定请求时才存在。您想要的是访问Web服务器配置。这完全是另一回事。
您可以通过访问包含执行ruby代码的进程的pid的应用程序范围的$$
变量来查找Web服务器的pid。然后,您可以查找此进程使用的端口。您可以使用执行外部应用程序的system
命令来实现此目的。这是一篇文章,解释了如何识别属于某个流程的端口:
http://www.cyberciti.biz/faq/what-process-has-open-linux-port/
当只有一个进程运行整个应用程序时,这将起作用。当使用thin和nginx的组合时,这不会起作用,因为运行代码的进程不是运行Web服务器的进程。