无法通过本地网络访问sinatra应用程序

时间:2013-04-20 09:55:54

标签: ruby-on-rails sinatra local-network

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

enter image description here

两个应用程序都使用Thin作为应用程序服务器。

这与sinatra的运作方式有关吗?

3 个答案:

答案 0 :(得分:30)

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

答案 1 :(得分:8)

让我向伊万的回答补充一些进一步的信息。 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,但我仍然必须像Ivan所说的那样指定“-o 0.0.0.0”。否则,无法从服务器计算机外部访问服务器。多奇怪啊!

答案 2 :(得分:6)

只想补充伊万的回答和罗伯特的澄清。

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

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

或者,如果您想继续进行开发,请指定“-o 0.0.0.0”