2013-04-20 112 views
9

我有rails应用程序。如果我用rails s(端口3000)启动它,它可以通过我的本地网络上的IP地址(我的情况是192.168.0.3)在我的机器和每台设备上正常工作。
我有sinatra应用程序。如果我用ruby app.rb(端口4567)启动它,它在我的机器上完美工作,但它无法从本地网络上的其他设备访问。无法通过本地网络访问sinatra应用程序

enter image description here

两个应用程序中使用薄为应用服务器。

这与Sinatra的工作原理有关吗?

+0

可能重复(http://stackoverflow.com/问题/ 15685528/can not-access-local-sinatra-server-from-another-computer-on-same-network) – matt 2013-04-20 13:11:20

回答

30

尝试ruby app.rb -o 0.0.0.0ruby app.rb -e production。要么应该工作。

8

让我给Ivan的答案增加一些更多的信息。 Sinatra的README在命令行中说:

Sinatra applications can be run directly: 

ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s 
HANDLER] 

Options are: 

-h # help 
-p # set the port (default is 4567) 
-o # set the host (default is 0.0.0.0) 
-e # set the environment (default is development) 
-s # specify rack server/handler (default is thin) 
-x # turn on the mutex lock (default is off) 

每文档的默认HOST为0.0.0.0,但我还是要指定一个“-o 0.0.0.0”就像伊万说。否则服务器无法从服务器外部访问。多么奇怪!

+0

该文档对于默认主机不正确,至少在开发模式下。 – 2014-03-12 18:58:56

6

只是想添加到伊万的答案和罗伯特的澄清。

默认情况下,您sinatra运行在开发模式,而不是生产模式。在开发模式下,sinatra将绑定到的默认主机是'localhost',这意味着只有本地机器才能与之交互。

指定'-e production'后,您的sinatra webapp将以生产模式运行,其中默认主机绑定到0.0.0.0,这意味着它可以与所有其他主机进行交互。

另外,如果你想留在发展中,指定“-o 0.0.0.0”

的[无法从同一网络上的其他计算机访问本地西纳特拉服务器]