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.2。uninitialized 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 afx
和 Process.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 服务器?