私の Rails 3.2 アプリでは、TradingViewから埋め込まれた JavaScript チャートを使用しています。ただし、表示するにはポート 443 を開く必要があるようです。したがって、ポートがユーザーに対して開いているかどうかを確認しようとしています。開いていない場合は、グラフ以外に何かを表示します。
この投稿「Ruby - ポートが開いているかどうかを確認する」を見つけ、この回答に取り組んできました。
require 'socket'
require 'timeout'
def port_open?(ip, port, seconds=1)
Timeout::timeout(seconds) do
begin
TCPSocket.new(ip, port).close
true
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
false
end
end
rescue Timeout::Error
false
end
ただし、次のように変更しました。
def port_open?(ip, port=443, seconds=1)
チェックするポートは常に同じであるためです。
私は次のようにメソッドを呼び出しています:
@ip = request.remote_ip
test = port_open?(@ip)
ファイアウォールの内側にいたときに、この問題を発見しました。
私が理解できないのは、ファイアウォールの背後にいないため、グラフを見ることができるということですが、以下のコードをローカルで実行すると、グラフを見ることができますが、false
.
ただし、を変更するport=3000
と、true が返されます。私は何を間違っていますか?ありがとう!