Вы можете попробовать random-port , простой Ruby gem (я автор):
require 'random-port'
port = RandomPort::Pool.new.acquire
Лучше всего использовать блок:
RandomPort::Pool.new.acquire do |port|
# Use the port, it will be returned back
# to the pool afterward.
end
Пул является поточно-ориентированным и гарантирует, что порт не будет использоваться другим потоком или где-либо еще в приложении, пока он не будет освобожден.