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

Posted

技术标签:

【中文标题】mongrel rails - 以编程方式报告它在哪个端口上运行【英文标题】:mongrel_rails - programatically report which port it's running on 【发布时间】:2015-07-24 11:29:06 【问题描述】:

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

当我在端口 3000、3001 和 3002 上运行一个 mongrel 集群时,我只想为端口 3000 上的 mongrel 执行此报告。所以,我需要将它包装在一个 if 块中,以测试哪个当前运行的 mongrel 正在使用的端口。谁能告诉我如何在我的代码中得到这个?

【问题讨论】:

【参考方案1】:

在初始化器中,

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

可以报告您的端口。

【讨论】:

谢谢@Alper - 抱歉,我应该说有问题的应用程序正在运行 Rails 2.2.2uninitialized constant Rails::Server 你的代码对我来说是错误的——我想你不知道 Rails 2 的等价物吗? 这只是模式,例如“开发” "3000" 也没有出现在 ENV.inspect 的任何地方。 Max,你能检查一下这个link 是否有帮助吗?那个defaults 对象,还是RailsConfigurator 类?我只是未能设置 rails env。您使用的是哪个 ruby​​ 版本? np :) 昨天我很高兴回到过去的美好时光,但现在再次查看 rails 2 代码..这与我们现在使用的完全不同..: ) 祝你升级过程好运:)【参考方案2】:

好的,我正在回答我自己的问题,因为我是在设置赏金后才弄清楚的!

我可以使用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

然后我可以 grep 获取 pid,并从匹配行中读取端口号,看看它是否为 3000。

所以,我的代码是

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

顺便说一句,如果有人可以告诉我如何直接获取正在运行的杂种的端口,而不通过 ps afxProcess.pid,我仍然会给你赏金:)

【讨论】:

【参考方案3】:

这在 2.2.2 中有效吗?

class SomeController < ApplicationController

  def index
        @port = request.port
  end
end

【讨论】:

他正试图将它放入初始化程序中。所以这行不通。 啊。对不起,我错过了。我是 Rails 新手,对它一无所知。

以上是关于mongrel rails - 以编程方式报告它在哪个端口上运行的主要内容,如果未能解决你的问题,请参考以下文章

带有 RVM 的 Rails mongrel 无法启动 - mongrel_rails (MissingSourceFile)

如何在 Mongrel 下重启 Rails,而不停止和启动 Mongrel

何时使用 Mongrel 作为 Rails 应用程序的 Web 服务器?

Rails 应用程序和 Mongrel 的奇怪问题

使用 Mongrel 在 Windows 上运行 Ruby On Rails

如何滚动重启杂种集群