php - Android App无法访问Vagrant Homestead托管的Web API

标签 php android vagrant laravel-5.2 retrofit2

注:
我是新来的拉维尔,流浪家园设置,和安卓的网络库改造。但我擅长android和php web开发。不过,我设置了laravel,开发了一个简单的测试web api,只是为了测试android应用程序中的改型库。另外,请不要将此标记为以下Q&A thread的重复问题。即使它问同样的问题,这些问题是不同的。
我的问题:
我的流浪家园托管了web api,我可以通过安装在主机os x mac上的web浏览器进行访问。而且我的家园还有两个laravel网站ll5.app和tapi.app(这是api)。

 _____________Mac OS X on MB Pro___________________
|  _______________            ______________      |
| | Vagrant       |          |              |     |
| |http://api.app | <------> | Web Browser  |     | IP: 192.168.1.7
| |_______________|          |______________|     |
|_________________________________________________|

But, I still couldn't fix this up for the following:

 _____________Mac OS X on MB Pro_______________________
|  __________________            ________________      |
| | Vagrant          |          |                |     |
| |http://api.app    | <---X--> | Android App    |     |
| | IP:192.168.10.10 |          |IP:192.168.56.1 |     |
| |__________________|          |________________|     |
|______________________________________________________|

我的宿主文件如下所示:
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
192.168.10.10   ll5.app
192.168.10.10   tapi.app

以下只是我的Homestead.yaml的一部分:
folders:
    - map: "/Users/randika/Private_Projects/webapps/"
      to: "/home/vagrant/webapps"

sites:
    - map: tapi.app
      to: "/home/vagrant/webapps/test_api/public"
    - map: ll5.app
      to: "/home/vagrant/webapps/ll5/public"

我试着用改进库来尝试一个web服务调用。
Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("<address>")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

For the <address> I tried giving following values:
        http://tapi.app
        192.168.10.10:8000

当我试图使用Genymotion Android的Web浏览器和http://192.168.10.10:8000地址访问这个文件时,它加载的是ll5.app主页,而不是API。
如何解决这个问题?如有任何帮助,我们将不胜感激。
至少告诉我这不可能?
备注:现在已经是凌晨1点多了,从上周末开始,我就一直在努力解决这个问题!

最佳答案

我不必放弃这个问题,一劳永逸地解决它。因为我已经厌倦了在需要主持某件事情的时候去找网络主机,并在同事之间公开分享。
答:这包括以下几点:
必须做的事情:
修改主机文件
在vagrant中修改nginx文件
可选择做的事情:
创建一个Atlas帐户,并使用vagrant share功能共享,以便通过Internet访问您在世界任何地方的流浪家园Laravel开发应用程序。
逐步回答:
1。介绍我的Mac+流浪+宅基地环境。
我的主机MacBook当前IP地址:192.168.1.7
我在宅基地内定义的流浪宅基地IP。yaml:192.168.10.10
我之前在我的问题中说过,我有多个网站(ll5.app和tapi.app)。下面是我的homestad.yaml的一部分,它已经映射了这些多个站点。

folders:
     - map: "/Users/randika/Private_Projects/webapps/"
       to: "/home/vagrant/webapps"

 sites:
     - map: tapi.app
       to: "/home/vagrant/webapps/test_api/public"
     - map: ll5.app
       to: "/home/vagrant/webapps/ll5/public"

好的,现在我们可以进入第二步了。很抱歉,由于编辑器错误,主机文件的上述部分不是代码格式。
2。我修改了hosts文件如下:
请注意,我已经将当前的IP地址映射到了vagrant IP地址。
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
192.168.10.10   tapi.app
192.168.10.10   ll5.app
192.168.1.7     192.168.10.10

并保存它。
三。开始你的流浪和供给。
 cd Homestead/
 vagrant up
 vagrant provision

4。让我们去编辑流浪者里面的nginx文件。通过ssh登录到vagrant。
 vagrant ssh

您应该看到一个vagrant ssh提示符,如下所示:vagrant@homestead:。~$
5。现在让我们去eddit我们的nginx配置文件为每个我们提供的流浪托管web应用程序。
 cd /etc/nginx/sites-available
 ls

您将看到以下Web应用配置列表(根据我的设置):
 ll5.app  tapi.app

在这两个web应用程序中,我想通过android genymotion访问tapi.app,但即使我给vagrants提供virtualbox ip或vagrant ip地址,也无法访问,因为我在vagrant homestad中托管了多个站点。如果这是一个单一的网站设置,那么我可以通过流浪IP地址访问。
获取所需的与应用程序相关的nginx配置文件,如下所示:(此步骤假设您了解vim编辑器的基本知识)。
 sudo vim tapi.app     ----> This will give you the chances to edit that NginX config file.

就像这样:
server {
  listen 80;
  listen 443;
  server_name tapi.app;
  root "/home/vagrant/webapps/test_api/public";

并将其更改为如下所示:
server {
  listen 80 default_server;
  listen 443 default ssl;
  server_name tapi.app;
  root "/home/vagrant/webapps/test_api/public";

希望您注意到以下两行:
 listen 80;    to    listen 80 default_server;
 listen 443;   to    listen 443 default ssl;

好,现在保存nginx配置文件并退出vim编辑器。
6。最后一个基本命令,将在vagrant ssh中执行:
sudo service nginx reload

如果你按照上面的步骤一直走到最后一步,那么现在你可能已经得到了问题的答案(在过去5个睡眠时间较短的晚上,我试图解决这个问题之后,我得到了问题的答案:d)。注意:nginx重新加载后,不要再去设置vagrant,因为如果您这样做了,上面的nginx配置文件将在您的编辑中重新写入。
注意事项:
请记住,我们编辑nginx配置文件只是为了让我们的一个站点默认通过服务器提供服务,所以这些步骤的执行仅仅是因为我们的流浪家园框中有多个站点。所以在我们完成了我们想要的之后,我们应该回滚我们对那个特定nginx配置文件所做的更改,就像我们通过vagrant ssh访问它一样。否则,如果你保持这种变化,因为它是你的其他网站将不会工作得很好。For further readings please read the following thread.
可选择做的事情:
假设你想让你的一个项目(web api或web app)在vagranthomestad下开发,你想通过互联网与你的同事分享吗?你也有其他的网站在里面(这就是为什么我们在上面挣扎)。所以我们也可以称之为(vagrant share)。因此,我编辑了nginx文件,并通知服务器我需要将哪个站点作为默认站点,因此通过执行vagrant share,现在将通过共享url为该站点提供服务。我们开始吧:
Visit this link只是想了解一下我们要做什么的背景知识。
流浪共享步骤:
Visit the following link并创建您的Atlas帐户。
只需键入exit退出vagrant ssh,然后在homestead目录中,登录到vagrant,如下所示:
vagrant login
当它提示您时,请分别提供您的Atlas帐户详细信息(用户名和密码)。
流浪共享的最后一步是,流浪共享本身。按以下步骤操作:
vagrant share
这将给您一个输出结果,如下所示,带有全局可访问的临时url,它将一直持续到您停止与ctrl+c命令共享为止。
Vagrant Share URL
希望这个答案能对其他人有所帮助,并能节省他们生命中的几个小时。
为地球上所有的工程师干杯!

关于php - Android App无法访问Vagrant Homestead托管的Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37013233/

相关文章:

javascript - 使用 PHP 将动态行数从 html 表单/表提交到 MySQL

php - 在 Linux 机器上使用 PHP 上传文件

java - Android必须实现继承的抽象方法

virtual-machine - vagrant 包如何保存对新框的更改

ubuntu - 从主机推送文件后,可以在 lxc 容器中找到文件

php - 导入 csv 数据到 mysql 后全部出现在一列中

php - 在表 1 上插入后触发,使用表 1 中的 where 条件列在表 2 上插入

java - GameStateManager 和屏幕

android - 在 Galaxy Tab 中自动连接到 Debug模式

php - Magento 2 变得非常慢(开发者模式)