Может ли sinatra прослушивать более одного порта? - PullRequest
2 голосов
/ 01 февраля 2012

Я хочу, чтобы одно работающее sinatra приложение прослушивало два порта 80 и 4567?

Возможно ли

  • в Windows XP
  • с использованием только ruby ​​
  • , на котором запущен только один экземпляр моего приложения sinatra?

Ответы [ 3 ]

5 голосов
/ 01 февраля 2012

Насколько я знаю, нет, это не так - https://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb

3 голосов
/ 01 февраля 2012

Конечно можно. Это называется переадресацией портов. Вы запускаете свое приложение через порт 80 и пересылаете порты с 4567 по 80. Таким образом, вы можете использовать оба порта. Или вы делаете это наоборот, когда запускаете локальное приложение и перенаправляете защищенный порт 80 на порт 4567. Кстати, большинство хостинговых служб запускают приложения своих клиентов.

2 голосов
/ 01 февраля 2012

Вы можете запустить две разные копии приложения, используя одну и ту же базу данных:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...