2013-05-30 38 views
24

Tôi có một ruby ​​(sử dụng sinatra) webservice trên windows 7 32 bit OS. Nó hoạt động trên cổng 4567. Làm việc tốt khi tôi sử dụng localhost: 4567 nhưng khi tôi thay localhost bằng ip cục bộ của máy của tôi, 192.168.103.99:4567 nó không hoạt động và không kết nối được. Tôi đã vô hiệu hóa tường lửa, qua proxy và thêm cổng 4567 vào ngoại lệ, vẫn không có may mắn.Ruby Sinatra Webservice chạy trên localhost: 4567 nhưng không phải trên IP

Điều gì có thể là vấn đề?

+0

Kiểm tra localhost là ràng buộc để IPV4 localhost 127.0.0.1 và không phải là một localhost IPV6. Ngoài ra, bạn đang sử dụng máy chủ web nào? Mongrel, Thin, Webrick, Hành khách? – mcfinnigan

+0

Làm cách nào để kiểm tra? WEBrick 1.3.1 – foobar

+2

ping localhost của bạn và xem địa chỉ ip nào được giải quyết. Để ràng buộc webrick với một ip cụ thể, hãy xem tài liệu này: http://smyck.net/2007/03/11/how-to-bind-webrick-to-any-ip-address/ – mcfinnigan

Trả lời

42

Từ những nhận xét của @SudarshanShubakar sau đây làm việc cho tôi.

ruby app.rb -o 0.0.0.0

10

Để thiết lập hostname máy chủ hoặc địa chỉ IP sử dụng sinatra settingbind như

set :bind, '192.168.103.99' 
+0

cảm ơn !! Điều này thực sự hữu ích! – Andres

1

này

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

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

Công trình này, nhưng cần một chút giải thích cho câu trả lời. – Pred

14

Khi sử dụng được xây dựng trong máy chủ thông qua việc kiểm tra run! if app_file == $0, Sinatra's doc giải thích rằng set :bind, '0.0.0.0' là cần thiết để làm cho giao diện có sẵn bên ngoài lớp localhost.

Không bắt buộc phải sử dụng địa chỉ IP tùy chỉnh hoặc DNS ngược (mydomain.com…): '0.0.0.0' là giá trị hợp lệ expected by Sinatra, sẽ được diễn giải chính xác.

Do đó, một, khép kín ứng dụng Sinatra tối thiểu làm sẵn có trên tất cả các giao diện, không chỉ localhost, sẽ là:

require 'sinatra/base' 

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

    get '/' do 
    'Hello World' 
    end 

    run! if app_file == $0 
end 
Các vấn đề liên quan