我想要一个运行 sinatra 应用程序侦听两个端口 80和4567?
可能吗
答案 0 :(得分:5)
答案 1 :(得分:3)
当然可以。它被称为端口转发。您在端口80上运行应用程序并将端口4567转发到80.这样您就可以拥有这两个端口。或者你反过来运行你的本地应用程序并将受保护的端口80转发到4567端口。这就是大多数托管服务运行其客户端应用程序的原因。
答案 2 :(得分:2)
您可以启动应用程序的两个不同副本,共享同一个数据库:
ruby myapp.rb -p 80 &
ruby myapp.rb -p 4567 &
这些将在两个单独的Ruby进程中运行,这可能会也可能不会导致问题(取决于您是否在进程中存储任何信息)。但是,默认的基于cookie的会话甚至可以跨进程工作:
require 'sinatra'
enable :sessions
get '/in/:msg' do
session[:msg] = params[:msg]
"I stored #{session[:msg]}"
end
get '/out' do
"Here you go: #{session[:msg]}"
end
行动中:
phrogz$ ruby sessions.rb -p 3000 &
[1] 58698
phrogz$ ruby sessions.rb -p 3001 &
[1] 58699
phrogz$ curl -b cookies.txt -c cookies.txt http://localhost:3000/in/foo
I stored foo
phrogz$ curl -b cookies.txt -c cookies.txt http://localhost:3000/out
Here you go: foo
phrogz$ curl -b cookies.txt -c cookies.txt http://localhost:3001/out
Here you go: foo