我正在使用 Sinatra 在 Ruby 上創建一個簡單且可移植的 Web 應用程式,并且我讓系統找到一個開放埠供服務器使用以下內容:
require 'sinatra'
require 'socket'
socket = Socket.new(:INET, :STREAM, 0)
socket.bind(Addrinfo.tcp("127.0.0.1", 0))
port = socket.local_address.to_s.chomp("\x0").to_i
set :port, port
set :bind, "127.0.0.1"
get "/" do
"Hello, World!"
end
我想啟動瀏覽器來自動查看應用程式,但問題是port變數和 Sinatrasettings.port都設定為0,所以我無法獲取服務器的 URL。
啟動代碼位于get "/" do塊之后:
Thread.new do
system "chromium-browser " <<
"-app='http://127.0.0.1:#{port}' " <<
"--no-sandbox > /dev/null 2>&1"
end
系統啟動后,我可以在WEBrick輸出中看到埠,但是如何獲取系統預先分配給socket的埠呢?
uj5u.com熱心網友回復:
嘗試這個
require 'sinatra'
require 'socket'
socket = Socket.new(:INET, :STREAM, 0)
socket.bind(Addrinfo.tcp("127.0.0.1", 0))
port = socket.local_address.ip_port
socket.close
set :port, port
set :bind, "127.0.0.1"
get "/" do
"Hello, World!"
end
socket.local_address.ip_port會給你埠資訊,但你需要在啟動 sinatra 之前關閉該套接字,否則它將失敗Errno::EADDRINUSE
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/441686.html
