在我的 Mac 上运行 ruby on rails 项目。我需要在我的安卓手机上测试它。有没有办法在我的安卓手机上查看我的 mac localhost?
13 回答
名称“localhost”只是对您自己计算机的回送。要在您的 Android 上访问它,您需要找到计算机的 IP 地址。
查找此信息的最通用方法(适用于 Mac 和 Linux)是进入终端并键入ifconfig
. 查找“en0”或“en1”,然后在该条目下查找“inet”列表。它将类似于“192.168.1.100”。当您找到该地址时,这就是您想要放入浏览器地址栏中的内容。
(特别是在 Mac 上,您可以转到“系统偏好设置”中的“共享”窗格,它会在那里告诉您。)
这是让您的 localhost 可用于在其他设备上进行测试的快速操作:
1)识别您的Android的IP:选择您连接的Wi-Fi(与Mac上的相同),您将获得详细的IP)。例如:我们假设您的 Android IP 是:192.168.0.10
2)在你的 Mac 上打开一个 Shell 并编辑你的主机:
sudo nano /etc/hosts
3)编辑文件是这样的:
127.0.0.1 192.168.0.10
4)识别你的Mac IP:(正如@Chuck完美解释的那样)(在你的shell中):
ifconfig
5)打开您在手机上使用的最喜欢的网络浏览器,并直接连接到您的 Mac IP(如果需要,使用端口):
http://192.168.x.x:8000/
6)享受你的测试:)
请注意,您可以为 Wi-Fi 上连接的每个支持执行此操作。
Chunk 的回答是正确的,假设您的移动设备和您的计算机在同一个网络上。但是,如果您希望您的 localhost 服务器对更广泛的 Internet 可见(例如,用于通过 3G 进行测试、开发 webhook 或与远程同事/客户端协作),则需要更多本地地址(以 10.* 或 192.168.* 开头) ) 对更广泛的 Internet 不可见。
传统的解决方案是端口转发和动态 DNS,但最近出现了一些旨在简化此过程的服务(免责声明:我是其中之一,PageKite 的作者)。
这些服务为您提供公共 DNS 名称和软件,将您的“本地主机”与云端中继服务器(也称为反向代理)连接起来。例如,如果您使用的是 PageKite,您可以在终端中运行以下命令:
$ pagekite.py 80 你的名字.pagekite.me
...创建一个映射http://yourname.pagekite.me/
到运行在http://localhost:80
. 当程序运行时,您的 localhost 站点将对 Internet 的其余部分可见。为了再次使其私有化,您只需关闭 pagekite.py 连接器程序即可。
为了完整起见,以下是我知道的一些 localhost 隧道服务:
- PageKite是免费软件 (Python),具有“按需付费”在线服务。您可以根据需要创建任意数量的长期子域,包括通配符 SSL 证书,并且前端中继在多个地理位置运行以提供冗余和响应能力。
- Localtunnel是一个免费(由 Twilio 赞助)的 Ruby 解决方案,它为连接提供临时名称。请注意,名称会被回收,因此您可能会在连接处于活动状态时看到意外流量。
- Showoff.io 和 Tunnlr.com 是类似于 Localtunnel 的专有付费服务,基于相同的基本技术(ssh 隧道)。
(很抱歉没有链接到最后两个,所以垃圾邮件保护阻止我对我的竞争对手公平。;-)
这对我来说可以通过本地网络使用 IP 访问 rails 服务器:
- 防火墙必须关闭。
/etc/hosts 应该有这个条目:
127.0.0.1 192.168.100.12
其中 192.168.100.12 是可以在终端中通过 ifconfig 命令找到的 IP 地址。
使用以下命令启动 rails 服务器:
rails server -b 0.0.0.0 -p 8080
此外,如果您想在 Android/iOS 设备上测试使用Angular开发的PWA 应用程序,您将需要使用:
ng serve --host 0.0.0.0
启动服务器 CLI。
如果您收到“无效的主机标头”,请使用:
ng serve --host 0.0.0.0 --disableHostCheck true
在阅读了这个线程(并且建议有效!)之后,我整理了一个解决这个问题的指南。此链接指向该指南,其中包含每个步骤的屏幕截图和查看位置。或者文字粘贴在下面。感谢您的帮助!
首先,您的手机和笔记本电脑必须连接到同一个 WiFi 网络。如果您使用手机移动热点,它仍然可以工作。但是,请确保在继续之前将两个设备连接到同一网络。
接下来,收集您的手机 IP 地址。为此,我使用 Network Info II 应用程序。绝对有另一种方法可以做到这一点。但是,Network Info II 可以根据需要工作,并且是本教程的文档。
现在在您的计算机上打开终端(不要担心您在哪个目录中)并运行命令 sudo nano /etc/hosts/。输入系统密码后,您会在终端顶部附近看到一串数字,后面跟着单词 localhost。localhost 实际上只是您计算机自己的服务器地址的别名,因此当您在浏览器中访问 localhost 时,它只是将 http 请求路由到您的本地计算机。为了将您的手机绑定到此循环中,请在数字字符串和本地主机之间输入其 IP 地址。
要保存此内容,请在提示保存时点击 control + X,然后点击 Y。之后,回车键将带您回到标准命令行。
在终端中打开第二个选项卡并启动本地服务器。我只使用一个简单的 python 服务器对此进行了测试,它可以通过在终端运行 python -m SimpleHTTPServer 8000 来运行。但是,我假设你可以启动任何你喜欢的本地服务器,这就是你所需要的参考是端口号。如果您确实使用简单的 python 服务器,则该端口号为 8000。
在终端中运行 ifconfig。这将显示大量信息,您应该向下滚动大约一半。您正在寻找的是在 inet 之后和 en0: 或 en1: 键内的网络掩码之前跟随的一串数字。
完毕!在您的 Android 上,打开浏览器并访问 inet 号,后跟冒号 (:) 和端口号。
虽然一个答案已被接受,但这对我有用:
- 确保您的计算机和安卓设备都在同一个网络上。
- 获取您计算机的 IP 地址。
ifconfig
(如果在终端内使用 mac 类型并查找en0/en1 -> inet
它应该类似于19*.16*.1.4
。) 打开您的移动设置并转到网络-> 长按您的 wifi 网络-> 修改网络-> 向下滚动到高级选项-> 选择代理手册并在代理主机名中输入您的地址,即
19*.16*.1.4
在端口内输入您的端口。并保存它。在谷歌浏览器中搜索
what is my ip
,并获取您的 IP,假设它是1**.1**.15*.2**
- 尝试
1**.1**.15*.2**:port/
从您的移动设备访问。
就这么简单。
MacOS Catalina 10.15.4
- 转到设置 -> 安全和隐私。
- 选择防火墙选项卡并使用您的笔记本电脑密码解锁设置:
- 选择防火墙选项...,然后在对话框中取消选中阻止所有传入连接的框,然后单击确定。
- 打开终端并输入 ifconfig。寻找en0。在该部分中找到位于inet附近的地址- 这是您的笔记本电脑在本地网络中的地址。
en0: flags0=<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 0
...
inet 192.168.0.123 netmask 0xffffff00 broadcast 192.168.0.255
...
- 使用 IP 地址 + 端口(如果您使用 localhost:4200 进行开发),否则省略端口:
http://<IP address found in en0 -> inet>:<port if needed>
- 利润!
如果您使用 php 运行 localhost,则解决方案将替换localhost
为 Macs IP
php -S 192.168.x.x:8080
代替
php -S localhost:8080
正如其他答案中提到的,url 必须由计算机的 IP 地址而不是 localhost 组成。如果这不起作用,在尝试其他任何操作之前,请检查在 Android 应用程序中进行 api 调用时是否正确提及了端口以及 IP 地址。也就是说,您应该对以下格式的 url 进行 api 调用:http://192.168.X.X:80/api/..
对于 MacO,打开系统偏好设置 > 网络。
您应该会看到消息“并且有 IP 地址:my-ip-address”
这将是您的 IP 地址,然后在浏览器中导航到 http://my-ip-address/port-number。切记不要在 http 中添加“s”。
要在 Android 上使用 localhost,您应该在连接时使用本地 IP 地址。首先检查您计算机的本地IP地址。然后跟着:
除了公认的答案之外,如果您需要通过本地 IP 地址使用 localhost,请按照以下步骤操作:
将您的本地 IP 地址添加到 httpd.conf (/etc/apache2/httpd.conf) 中,如下所示:
(根据您使用的服务器更改端口)
Listen 12.34.56.78:80
Listen:允许您将 Apache 绑定到特定的 IP 地址和/或端口,而不是默认值。
保存,关闭并重新启动 apache。