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

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

两个应用程序都使用 Thin 作为应用服务器。
这与 sinatra 的工作方式有关吗?
尝试ruby app.rb -o 0.0.0.0或ruby app.rb -e production。要么应该工作。
让我在伊万的回答中添加一些进一步的信息。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”。否则无法从服务器机器外部访问服务器。多奇怪!
只是想补充一下伊万的回答和罗伯特的澄清。
默认情况下,您的 sinatra 以开发模式运行,而不是生产模式。在开发模式下,sinatra 绑定的默认主机是'localhost',这意味着只有本地机器可以与之交互。
一旦你指定了“-e production”,你的 sinatra webapp 就会在生产模式下运行,它绑定的默认主机是 0.0.0.0,这意味着它可以与所有其他主机交互。
或者,如果您想继续开发,请指定“-o 0.0.0.0”