2015-05-13 25 views
9

在我的本地机器上,我使用杂种运行导轨。我有一些启动时运行的东西,通过config/initializers中的一个文件,它使用puts来告诉我它正在使用哪个数据库,用于发送电子邮件的内容以及其他一些信息。mongrel_rails - 以编程方式报告它在哪个端口上运行

当我在端口3000,3001和3002上运行一组群时,我只想为端口3000上的杂种人做这个报告。因此,我需要将它包装在一个if块中,该块测试哪个端口目前正在运行的杂种犬正在使用。任何人都可以告诉我怎样才能在我的代码中得到这个?

回答

1

好吧,我正在回答我自己的问题,因为我设定了一个赏金后才明白它!

我可以通过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去我还是给你奖金:)

在初始化
2

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

可以报告你的端口。

+0

谢谢@Alper - 对不起,我应该说有问题的应用程序正在运行** Rails 2.2.2 **。你的代码对于我来说有'未初始化的常量Rails :: Server'的错误 - 我不认为你知道Rails 2的等价物吗? –

+0

ENV ['RAILS_ENV']变量里面什么都没有? –

+0

这只是模式,例如“开发” –

1

这是否在2.2.2工作?

class SomeController < ApplicationController 

    def index 
     @port = request.port 
    end 
end 
+1

他正试图让它在一个初始化程序。所以这不会工作。 –

+0

啊。对不起,我错过了。我是新来的铁轨和掩盖它。 –

相关问题