php-Android应用无法访问Vagrant Homestead托管的Web API
作者:互联网
注意:
我是Laravel,Vagrant-Homestead设置和Android网络库Retrofit的新手.但是我擅长Android和PHP Web开发.但是,我设置了Laravel,开发了一个简单的测试Web API,仅用于测试Android App中的Retrofit库.另外,请不要将此标记为以下Q&A thread的重复问题.即使它提出相同的问题,这些问题也有所不同.
我的问题:
我可以在Vagrant-Homestead托管的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"
我尝试给出以下内容,以尝试使用Retrofit库进行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点了,从上周末开始,我一直在为此苦苦挣扎!
解决方法:
我不必放弃这个问题并一劳永逸地解决它.因为当我需要托管某些东西并在同事之间公开共享时,我已经厌倦了寻找Web托管者的工作.
答案骨架:这包括您以下内容:
必须做的事情:
>修改主机文件
>修改流浪汉中的Nginx文件
可选的待办事项:
>创建一个Atlas帐户,并使用流浪者共享功能来共享访问权,以通过Internet在世界任何地方访问您的Vagrant-Homestead Laravel开发应用程序.
逐步回答:
1.介绍我的Mac Vagrant Homestead环境.
我的主机MacBook当前IP地址:192.168.1.7
我在Homestead.yaml中定义的Vagrant-Homestead IP:192.168.10.10
我之前在我的问题中已经告诉过我,我有多个站点(ll5.app和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"
好的,现在我们可以继续第二步了.抱歉,由于编辑器错误,Hosts文件的上述部分未采用代码格式.
2.我修改了主机文件,如下所示:
Note that I’ve mapped my current IP address with the Vagrant IP address.
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
并保存它.
3.开始您的无业游民和供应.
cd Homestead/
vagrant up
vagrant provision
4.让我们去编辑流浪汉中的Nginx文件.通过ssh登录到流浪汉.
vagrant ssh
您应该看到如下所示的vagrant ssh提示符:vagrant @ homestead:〜$
5.现在,让我们为每个预配置的Vagrant托管Web应用程序编辑Nginx配置文件.
cd /etc/nginx/sites-available
ls
您将看到以下Web应用程序配置列表(根据我的设置):
ll5.app tapi.app
在这两个Web应用程序中,我想通过Android Genymotion访问tapi.app,但是即使我提供了Vagrants VirtualBox IP或Vagrant IP地址,也无法访问它,因为我在vagrant homestead中托管了多个站点.如果是单个站点设置,则可以通过Vagrant IP地址访问.
如下获取所需的与应用程序相关的Nginx Config文件:(此步骤假定您了解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 Config文件并从Vim编辑器退出.
6.现在,最后一个基本命令将在无所事事的ssh中执行:
sudo service nginx reload
如果您按照上述步骤进行了最后一步,那么现在您可能已经找到了问题的答案(过去5个晚上尝试用较少的睡眠时间解决此问题后,我就得到了我的问题的答案:D ).注意:在重新加载Nginx之后,不要再去配置vagrant,因为如果这样做,上面的Nginx配置文件将通过您的编辑重写.
注意事项:
请记住,我们编辑Nginx Config文件只是为了使我们的站点之一可以通过服务器默认提供服务,因此之所以执行这些步骤,只是因为我们在Vagrant-Homestead框中有多个站点.因此,在完成所需的操作之后,我们应该回滚对特定Nginx Config文件所做的更改,就像通过Vagrant SSH访问该文件一样.否则,如果您保留此更改,那么其他站点将无法正常运行. For further readings please read the following thread.
可选的待办事项:
>假设您要在Vagrant-Homestead下开发一个项目(Web API或Web应用程序),并想通过Internet与同事共享?而且您也有另外一堆网站(这就是我们在上述步骤中苦苦挣扎的原因).因此,我们也可以称之为(无用份额).因此,我已经编辑了Nginx文件,并通知服务器我需要将哪个站点用作默认站点,因此通过进行Vagrant共享,现在可以通过共享URL为该站点提供服务.因此,让我们开始吧:
Visit this link只是为了让我们对我们要做的事情有一些背景了解.
流浪者共享步骤:
> Visit the following link,然后创建您的Atlas帐户.
>仅通过键入exit从Vagrant ssh退出,然后在Homestead目录中,按如下所示登录到vagrant:
流浪汉登录
>在提示时分别提供您的Atlas帐户详细信息(用户名和密码).
>流浪者分享的最后一步是,流浪者分享本身.如下进行:
流浪者份额
这应该为您提供如下结果,该结果具有可全局访问的临时URL,该URL一直持续到您停止使用Ctrl C命令共享为止.
希望这个答案对其他人有帮助,并且可以节省他们的一生.
为这个星球上的所有工程师欢呼!
标签:laravel-5-2,retrofit2,vagrant,php,android 来源: https://codeday.me/bug/20191118/2030228.html