11

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

在此处输入图像描述

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

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

4

3 回答 3

32

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

于 2013-04-20T11:09:09.767 回答
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)

根据文档,默认主机是 0.0.0.0,但我仍然必须像 Ivan 所说的那样指定“-o 0.0.0.0”。否则无法从服务器机器外部访问服务器。多奇怪!

于 2013-10-07T03:07:50.017 回答
7

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

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

一旦你指定了“-e production”,你的 sinatra webapp 就会在生产模式下运行,它绑定的默认主机是 0.0.0.0,这意味着它可以与所有其他主机交互。

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

于 2013-12-08T14:09:26.247 回答