sinatra能听多个港口吗?

时间:2012-01-31 23:04:23

标签: ruby sinatra

我想要一个运行 sinatra 应用程序侦听两个端口 80和4567?

可能吗

  • 在Windows XP上
  • 仅使用红宝石
  • 只运行我的sinatra应用程序的一个实例?

3 个答案:

答案 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