2015-05-13 35 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

啊。對不起,我錯過了。我是新來的鐵軌和掩蓋它。 –

相關問題