2014-01-24 62 views
1

我想從第三方應用程序向我的Rails服務器註冊回調URL,並在啓動時執行此註冊,以便我可以開始捕獲通知。獲取控制器外的服務器端口

尋找at this question and the answers我看到類似的建議:

class SomeController < ApplicationController 
    def some_action 
    raise "I'm running on port #{request.port}." 
    end 
end 

這是沒有好,因爲我在控制我不是。接下來是:

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

不過,我從我的代碼和rails console得到這個錯誤:

NoMethodError: undefined method 'Server' for Rails::Module 

我已經得到了成功運用Socket.gethostname的主機名,但我怎麼的端口號?

回答

1

您不能訪問request.port的原因是請求對象綁定到客戶端請求,而客戶端請求僅在查看特定請求時才存在。你想要的是訪問Web服務器配置。這完全是另一回事。

您可以通過訪問包含執行ruby代碼的進程的pid的應用程序範圍的變量$$來查找webserver的pid。然後你可以查找這個進程使用的端口。您可以使用執行外部應用程序的system命令執行此操作。這裏是解釋OU如何識別屬於一個進程的端口後:

http://www.cyberciti.biz/faq/what-process-has-open-linux-port/

時,只有一個正在運行的整個申請過程這將工作。當使用thin和nginx的組合時,這不會起作用,因爲運行代碼的進程不是運行Web服務器的進程。

相關問題