mongrel_rails - 以编程方式报告它在哪个端口上运行



在我的本地机器上,我用杂种运行栏杆。我有一些在启动时运行的内容,通过config/initializers中的文件,该文件使用 puts告诉我它正在使用的数据库,用于发送电子邮件的内容以及其他一些信息。

当我在端口3000、3001和3002上运行一群杂货集团时,我只想在端口3000上为杂种杂货进行此报告。因此,我需要将其包装在if块中当前正在运行的杂种正在使用。谁能告诉我如何在我的代码中获取此内容?

在初始化器中,

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

可以报告您的端口。

好吧,我正在回答自己的问题,因为我在设置赏金后才想出!

我可以使用Process.pid获得当前运行过程的 PID 。然后我可以做ps afx | grep mongrel,这给了我这样的结果

 pid                                                                                 port
  |                                                                                    |
  V                                                                                    V
10761 pts/1    S      0:20  |   _/usr/local/bin/ruby /path/to/mongrel_rails start -p 3000
10762 pts/1    S      0:18  |   _/usr/local/bin/ruby /path/to/mongrel_rails start -p 3001
10763 pts/1    S+     0:23  |   _/usr/local/bin/ruby /path/to/mongrel_rails start -p 3002

然后我可以为PID抓取它,并在匹配行中读取端口号,看看是否是3000。

所以,我的代码是

if `ps afx | grep mongrel_rails`.split("n").detect{|line| line =~ /^#{Process.pid}.+-ps3000/}
  #this is a mongrel running on port 3000 - do the extra stuff
  ....
end

顺便说一句,如果有人可以告诉我如何直接获得跑步的港口,而无需通过ps afxProcess.pid,我仍然会给您赏金:)

此功能在2.2.2中有效吗?

class SomeController < ApplicationController
  def index
        @port = request.port
  end
end

相关内容

  • 没有找到相关文章

最新更新