如何在本地网络上托管 Ruby on Rails 应用程序,以便多人可以访问它?

Posted

技术标签:

【中文标题】如何在本地网络上托管 Ruby on Rails 应用程序,以便多人可以访问它?【英文标题】:How do you host a Ruby on Rails application on a local network, so multiple people can access it? 【发布时间】:2012-08-04 01:03:21 【问题描述】:

我是 RoR 的新手,对它的体验几乎为零。我收到了别人的项目,我需要找到一种方法来托管应用程序,这样人们就可以在本地访问它。该应用程序是蜘蛛脚本/walker 脚本/网络爬虫,无论您如何称呼它。基本上,它连接到一个网站,登录,每天检索某些数据并将其与以前的数据进行映射。在本地机器上,你使用它,访问 localhost:3000,你会得到前人设计的网页。我只是想知道如何让我们本地网络上的人公开该页面,以便他们可以连接到任意 IP 并看到相同的页面(它每天更新)?

我尝试做的是让包含应用程序的文件夹对网络公开,但为了使用它,我必须让网络上的每个人都允许写入它,并且每个人都必须安装 RoR 才能使用它。我想避免这种情况,因为它看起来不合逻辑,也不是我想要做的。

查看代码,我可以进行逆向工程并理解它的作用,但是在本地托管 Web 应用程序或类似的东西时,我以前从未这样做过。请帮忙!

提前致谢!

**编辑 - 这一切都是在 Windows 7 机器上完成的。

【问题讨论】:

在不知道您是如何启动应用程序的情况下,很难给您一个准确的答案;但是您需要做两件事 [a] 确保服务器正在侦听您的 LAN IP 和 [b] 确保端口 3000 在您的网络上未被阻止。使用您在本地计算机上启动系统所采取的步骤更新您的问题,以获得更详细的答案。 【参考方案1】:
    由于您使用的是 Windows,请打开命令行并运行 ipconfig 以查找您的本地 IP。它将列在“IP 地址”下。 告诉局域网中的人访问http://192.168.x.x:3000,将步骤 1 中的 IP 地址替换为 192.168.x.x。

【讨论】:

【参考方案2】:

编辑:我错过了一件重要的事情,你是窗户。在 Windows 上,您可以使用 thin 并将其放在负载均衡器后面。虽然我建议将它托管在 UNIX 机器上:)

虽然在 webrick 中运行它(webrick 是用于开发的应用程序服务器,即当你运行 rails s 时)将让其他用户访问该网站永远不要为生产应用程序做同样的事情。如果你想在生产中运行这个应用程序,你需要更强大的应用程序服务器,比如passenger。我建议您将它与 Apache 或 nginx 一起使用,而不是单独使用它。设置完所有这些后,其他人可以通过输入 IP(xx.xx.xx.xx)来使用您的应用程序,您也可以要求您的系统管理员设置本地 DNS,这样您的用户就不必总是记住 IP 地址。

【讨论】:

【参考方案3】:

说明:

在启动 Rails Server 时,我们还可以设置一些选项来配置开发环境下站点的 IP 地址和端口号,以在本地网络中托管网站。因此,如果我们想将 IP 从http://127.0.0.1:3000 更改为http://192.168.x.x:port(x= 0 到 255 任意一个数字),我们可以在 Rails 服务器命令中设置!但是为此,我们需要在当前网络中找出我们当前的 IP 地址,这将有助于我们在本地网络中为网站提供服务。

所以第一步:

我们将在我们的 PC 上打开我们的终端。对于 android 用户,我们需要打开 Termux 应用程序。然后只需键入ifconfig 即可获取我们设备在当前网络中的IP 地址。我们会得到这样的输出(这里我使用Android设备进行开发。所以输出可能与PC终端上的不同,但过程相同):

$ ifconfig
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
lo: flags=XX<UP,LOOPBACK,RUNNING>  mtu XXXXX
    inet 127.0.0.1  netmask 255.XXX.XXX.XXX
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen XXXX  (UNSPEC)
wlan0: flags=XXXX<UP,BROADCAST,RUNNING,MULTICAST>  mtu XXXX
    inet 192.168.1.103  netmask 255.XXX.XXX.XXX  broadcast 192.168.1.255
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen XXXX  (UNSPEC)

X= some numbers with our device credentials which is dummied with this variable

如果您使用的是 WiFi 路由器,那么我们将需要 wlan0 部分来获取我们的设备 IP。在 wlan0 部分下有一个 inet 子部分显示我们当前的 IP! 是的,我们需要那个IP地址192.168.1.103!这可能因您的设备和网络而异。这是这个任务的关键!现在我们进入第二个重要步骤。

所以第二步是:

需要输入命令来配置 IP 地址。

rails s -b 192.168.1.103 -p 8080

这里:

    rails s 用于 rails 服务器 -b 192.168.1.103 用于出价 IP 地址 用于从默认 IP http://127.0.0.1 进行自定义,这是我们的本地主机地址。 -p 8080 用于 端口 设置。 这部分是可选的。默认端口为 3000

这是将 localhost IP (http://127.0.0.1) 更改为本地网络 IP 的过程,该 IP 可用于同一网络用户的其他设备。

现在我们的 rails 应用程序可以在我们的本地网络中使用!同一网络中的其他用户也可以在服务器命令运行时访问该网站。如果您还配置了端口号,则链接将为 http://192.168.1.103:8080。否则,如果您在没有端口配置的情况下使用了命令rails s -b 192.168.1.103,则链接将为:http://192.168.1.103:3000

再次声明: 192.168.1.103 适用于我的情况,您的设备的 IP 地址会有所不同。这将需要用于您的服务器和链接地址。

【讨论】:

以上是关于如何在本地网络上托管 Ruby on Rails 应用程序,以便多人可以访问它?的主要内容,如果未能解决你的问题,请参考以下文章

在 Linode 上托管 Rails 应用程序

如何在 Heroku 上托管的 Ruby/Sinatra 应用程序中设置 HTTP 标头?

在 Windows Server 上托管 Ruby 应用程序是不是可行? [关闭]

在 Amazon 的 EC2 上托管 Rails 应用程序的典型工具和资源是啥?

在同一台服务器上托管多个 Rails 应用程序

在多个绑定上托管 IIS 站点时如何获取正确的本地地址 URI?