【问题标题】:Getting the server port outside a Controller获取控制器外部的服务器端口
【发布时间】:2014-01-24 17:37:44
【问题描述】:

我想从第三方应用程序向我的 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成功获取了主机名,但是如何获取端口号?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

    您可以通过访问应用程序范围的$$ 变量来查找网络服务器的 pid 来解决这个问题,该变量包含执行 ruby​​ 代码的进程的 pid。然后您可以查找此进程使用的端口。您可以使用执行外部应用程序的system 命令来完成此操作。这是一篇文章,解释了如何识别属于进程的端口:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2021-05-09
      • 1970-01-01
      相关资源
      最近更新 更多