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

11

我有一个Rails应用程序。如果我使用rails s命令(端口3000)启动它,在我的电脑上和本地网络中的每个设备(在我的情况下是192.168.0.3)上都可以完美运行。
我有一个Sinatra应用程序。如果我使用ruby app.rb命令(端口4567)启动它,它在我的电脑上可以完美运行,但其他设备无法访问它。

enter image description here

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

这是与Sinatra工作方式有关的问题吗?


3个回答

32
尝试 ruby app.rb -o 0.0.0.0 或者 ruby 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,但我仍然需要像Ivan说的那样指定“-o 0.0.0.0”。否则,服务器无法从服务器机器外部访问。多么奇怪!


该文档关于默认主机的描述是不正确的,至少在开发模式下是这样。 - Tony Adams

7

我想补充Ivan的回答和Robert的澄清。

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

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

或者,如果您想保持在开发模式下,请指定'-o 0.0.0.0'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接