2013-05-30 6 views
24

У меня есть рубин (с использованием синатра) webservice на windows 7 32-разрядная ОС. Его работает на порте 4567. Его работая отлично когда я использую localhost: 4567 но когда я заменяю localhost локальным ip моей машиной говорю, 192.168.103.99:4567 оно не работает, и не может соединиться. Я уже отключил брандмауэр, прокси-сервер и добавил порт 4567 в исключение, но все равно не повезло.Ruby Sinatra Webservice работает на localhost: 4567, но не на IP

В чем может быть проблема?

+0

Проверить локальный связан с ipv4 LOCALHOST 127.0.0.1 и не IPV6 LOCALHOST. Кроме того, какой веб-сервер вы используете? Монгрель, Тин, Вэбрик, Пассажир? – mcfinnigan

+0

Как это проверить? Его WEBrick 1.3.1 – foobar

+2

ping localhost и посмотрите, какой IP-адрес разрешен. Чтобы привязать webrick к определенному ip, см. Эту документацию: http://smyck.net/2007/03/11/how-to-bind-webrick-to-any-ip-address/ – mcfinnigan

ответ

42

из комментария @SudarshanShubakar следующие работал для меня.

ruby app.rb -o 0.0.0.0

10

Чтобы установить имя хоста сервера или IP-адреса Используйте sinatra settingсвязывают как

set :bind, '192.168.103.99' 
+0

спасибо !! Это было действительно полезно! – Andres

1

это

require 'rubygems' 
require 'sinatra' 
require "dbi" 

set :bind, '192.168.200.185' 
get '/' do 
    'hello word' 
end 
+0

Это работает, но для ответа требуется немного объяснений. – Pred

14

При использовании встроенного сервера через run! if app_file == $0 проверки Sinatra's doc объясняет, что set :bind, '0.0.0.0' требуется сделать интерфейс доступен за пределами localhost слоя.

Не требуется использовать пользовательский IP-адрес или обратный DNS (mydomain.com ...): '0.0.0.0' - это законное значение expected by Sinatra, которое будет интерпретироваться правильно.

Таким образом, минимальный, самодостаточным Синатра приложение доступны на всех интерфейсах, а не только localhost, будет:

require 'sinatra/base' 

class MyApp < Sinatra::Base 
    set :bind, '0.0.0.0' 

    get '/' do 
    'Hello World' 
    end 

    run! if app_file == $0 
end