在我的本地机器上,我用杂种运行栏杆。我有一些在启动时运行的内容,通过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 afx
和Process.pid
,我仍然会给您赏金:)
此功能在2.2.2中有效吗?
class SomeController < ApplicationController
def index
@port = request.port
end
end