튜토리얼 칼럼에서 소개합니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다! 오늘은 프로젝트의 소스 코드를 풀고 새로운 Laravel-Sail 개발 환경을 사용했습니다. 이전 Homestead 개발 환경은 이제 백업일 뿐입니다. 처음에는 종속성 설치, 컨테이너 시작 및 데이터 마이그레이션을 포함하여 모든 것이 순조롭게 진행되었습니다. 그런 다음 개발 도메인 이름을 호스트 파일에 구성했습니다. 127.0.0.1 devocus.test
http://devocus .test: 8016
, 모든 것이 잘 진행되고 있다고 생각했지만 페이지가 항상 로드되고 전체 인터페이스가 로드되는 데 거의 30초가 걸리는 것을 발견했으며 다른 여러 프로젝트와도 혼란스러웠습니다. 사용되는 Laravel-Sail 개발 환경은 거의 항상 몇 초 안에 시작됩니다.
그런 다음 브라우저 개발자 도구를 열었고 모든 요청이 30초 이상 걸리는 것을 발견했습니다. 파일 IO 문제가 발생했나요? 하지만 내 프로젝트는 Ubuntu 하위 시스템에 배치됩니다. 네트워크 문제인가요? 다른 항목은 완전히 정상입니다. 파일 권한 변경, 래더 닫기, 컨테이너 삭제 및 재생성 등 가능한 모든 솔루션을 시도했지만 소용이 없었습니다.
그래서 Telescope를 설치하고 각 요청의 세부 사항을 확인했습니다. Telescope를 여는 것도 매우 느렸고 약 1분 정도 기다렸다가 마침내 Telescope 인터페이스가 로드되었습니다. 그러나 쿼리 결과는 매우 놀랐습니다. http://devocus.test:8016
,本以为一切顺利,但是却发现页面一直处于加载状态,隔了差不多 30 秒才将完整的界面加载出来,我百思不得其解,其他几个项目我都是用的 Laravel-Sail 开发环境,几乎都是秒开,这个项目是肿么了?
然后我打开浏览器开发者工具,发现所有的请求都需要 30 秒以上,难道遇到了文件 IO 问题?但是我项目是放在 Ubuntu 子系统中的呀。网络问题?那其他几个项目又完全正常呀。我尝试着各种可能的解决办法,改文件权限、关闭ladder、删除并重新创建容器等等,一顿折腾下来,毫无结果。
于是安装了 Telescope,查看每个请求的详细情况,打开 Telescope 速度也非常慢,我等待了大概一分钟,Telescope 的界面终于加载出来了。但是查询结果令我非常意外:
Telescope 显示,每个请求的处理速度都很快,数据查询也很快,我佛了…
于是找同事的电脑试一下,开发环境都是 Laravel-Sail 没想到他的电脑上访问也同样十分缓慢,这直接将我们的思维引导到 “项目代码有问题” 这个方向上,于是我花了一上午时间仔细对比检查各种配置文件、env文件,升级了 laravel 以及各种依赖的版本。但是当我每次满怀期待的在浏览器打开应用时,还是卡的让我怀疑人生,而且日志记录一切正常。然后使用搜索引擎尝试搜索这个问题的解决方案,中文搜索、英文搜索都没有结果。一个上午过去了,还是没有搞定这个问题,甚至一股绝望感涌上心头。
最后还是决定去吃午饭,先让自己放松下来。吃完饭回来的路上,我又一次思考这个问题,脑袋里各种搜索出来的答案一条一条闪过,突然一个单词从我眼前“飞过”:hosts
。
回到工位上我打开电脑,想着先用 ip 直接访问应用看看情况,于是在浏览器输入http://127.0.0.1:8016
,界面被急速打开,我大概有点眉目了,于是打开 hosts 文件,想着换个域名试试:
# 127.0.0.1 devocus.test 127.0.0.1 ifocus-dev.test
然后打开浏览器,输入http://ifocus-dev.test:8016
,应用被快速打开,非常流畅,问题就这样莫名其妙的解决了。
但是问题出在哪里呢?我再次打开 hosts 文件,仔细检查,发现之前做过的同一个域名的解析静静地躺在 hosts 文件里面,我将开发环境由 Homestead 迁移到 Laravel-Sail时,忘记修改 hosts 文件了:
... 192.168.10.10 devocus.test ... # 127.0.0.1 devocus.test 127.0.0.1 ifocus-dev.test
在 hosts 文件中,同一个域名解析到两个 ip 会发生什么情况呢?我去搜索引擎上搜索了一下,找到了答案:
电脑在hosts文件中是由上往下查找 IP,相同的域名取第一个 IP,如果第一个IP受阻,那么会转向第二个IP,乃至第N个,但是这种方式达不到负载均衡的效果,但可以增大打开网站的几率。
由于我将 devocus.test
解析到了两个IP地址:192.168.10.10 及127.0.0.1,当我在浏览器中打开http://devocus.test
hosts
라는 단어가 떠올랐다. http://127.0.0.1:8016
을 입력했습니다. 브라우저가 열리자 인터페이스가 빠르게 표시되었습니다. 조금 혼란스러울 수도 있어서 호스트 파일을 열고 다른 도메인 이름을 시도해 볼 생각을 했습니다: 🎜rrreee🎜 그런 다음 브라우저를 열고 http:/를 입력했습니다. /ifocus-dev.test:8016
, 그리고 응용 프로그램은 빠르고 원활하게 열리며 문제는 설명할 수 없이 해결되었습니다. 🎜 컴퓨터는 호스트 파일에서 위에서 아래로 IP를 검색합니다. 동일한 도메인 이름에 대해 첫 번째 IP가 차단되면 다음입니다. 두 번째 IP로 전환하거나 심지어 N번째 IP로 전환하게 됩니다. 그러나 이 방법은 로드 밸런싱 효과를 얻을 수는 없지만 웹 사이트를 열 확률을 높일 수 있습니다. 🎜🎜
http://devocus
를 열 때 devocus.test
를 두 개의 IP 주소(192.168.10.10 및 127.0.0.1)로 구문 분석했기 때문입니다. , 처음에 192.168.10.10 에 접속했는데 홈스테드가 닫혀있어서 접속이 안됐나봐요. 이 과정이 30초 정도 지속됐고, 이후 시스템은 계속해서 호스트 파일에서 다른 IP를 찾아 접속했습니다. 웹페이지는 127.0.0.1에서만 열렸습니다. 모든 요청이 이런 과정을 거쳐야 하기 때문에 시스템이 많이 정체된 느낌이 듭니다. 이 시점에서 제가 고민했던 문제가 해결되었습니다. 🎜그래서 다들 프로젝트를 개발할 때 이러한 미묘한 문제에 더 주의를 기울여야 합니다. 나처럼 독선적인 베테랑도 작은 문제로 인해 큰 문제가 발생할 수 있습니다. 소프트웨어 산업은 정말 끊임없이 구덩이를 밟고, 구덩이를 파고, 구덩이를 채워야 하는 실용적인 산업입니다.
근데 생각해보니 당시 홈스테드 환경이 열려 있었다면 더욱 고민이 되었을 것 같아요. ㅋㅋㅋ
위 내용은 호스트 파일 구성 오류로 인해 애플리케이션 지연이 발생함(Laravel-Sail 개발 환경)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!