【问题标题】:Cannot access sinatra app through the local network无法通过本地网络访问 sinatra 应用程序
【发布时间】:2013-12-08 22:09:26
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

试试ruby app.rb -o 0.0.0.0ruby app.rb -e production。两者都应该工作。

【讨论】:

    【解决方案2】:

    让我在 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)
    

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

    【讨论】:

    • 文档中关于默认主机的内容不正确,至少在开发模式下是这样。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 2017-10-20
      • 1970-01-01
      • 2021-12-16
      • 2019-02-28
      • 2017-12-02
      • 2013-04-03
      相关资源
      最近更新 更多