为什么要使用Homestead来开发Laravel应用?
一、使用Homestead来开发Laravel应用的原因
1、快速搭建
Homestead提供了预配置的Laravel开发环境,无需手动进行配置,使用很方便,只需几个命令即可启动开发环境。
2、一致性
Homestead使用虚拟机来提供标准化的开发环境,保证开发者之间的开发环境一致,从而避免了由于环境不同带来的问题。
3、易于部署
在开发完成后,可以将完整的Homestead虚拟机映像上传到云服务器上,这样就可以非常简单地部署应用程序,并且可以保证应用程序在云服务器上运行的环境与本地开发环境一致。
4、方便调试
Homestead提供了许多工具来方便开发和调试,包括PHPMyAdmin、Xdebug、Laravel Debugbar等。
5、跨平台支持
Homestead能够在Windows、Linux和MacOS等操作系统上运行,无论团队中使用何种操作系统的开发人员都可以使用相同的开发环境。
二、使用非Homestead环境开发Laravel应用会遇到的问题
1、多个 Laravel 应用数据库连接错乱
在多个基于 Laravel 的 Web 应用中,当应用 A 进行一个长时间操作时(PHP 会运行超过 30s+),在这期间,在应用 B 中进行数据库操作时,B 应用会连接到 A 应用中的数据库,而非 B 的数据库。
下面的这段错误就是因为不知道为何连接到了 A 数据库而出现的:
2/2 QueryException in Connection.php line 655: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'database_a.member_user' doesn't exist (SQL: select * from member_user limit 1) in Connection.php line 655 at Connection->runQueryCallback('select * from member_user limit 1', array(), object(Closure)) in Connection.php line 611 at Connection->run('select * from member_user limit 1', array(), object(Closure)) in Connection.php line 324 at Connection->select('select * from member_user limit 1') at call_user_func_array(array(object(MySqlConnection), 'select'), array('select * from member_user limit 1')) in DatabaseManager.php line 296 at DatabaseManager->__call('select', array('select * from member_user limit 1')) in Facade.php line 216 at DatabaseManager->select('select * from member_user limit 1') in Facade.php line 216 at Facade::__callStatic('select', array('select * from member_user limit 1')) in IndexController.php line 35 at DB::select('select * from member_user limit 1') in IndexController.php line 35 at IndexController->index(object(ConfigService), object(WechatQrcodeService)) at call_user_func_array(array(object(IndexController), 'index'), array(object(ConfigService), object(WechatQrcodeService))) in Controller.php line 256 at Controller->callAction('index', array(object(ConfigService), object(WechatQrcodeService))) in ControllerDispatcher.php line 164 at ControllerDispatcher->call(object(IndexController), object(Route), 'index') in ControllerDispatcher.php line 112 at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 114 at ControllerDispatcher->callWithinStack(object(IndexController), object(Route), object(Request), 'index') in ControllerDispatcher.php line 69 at ControllerDispatcher->dispatch(object(Route), object(Request), '\App\Controller\Wecolour\IndexController', 'index') in Route.php line 203
原因分析:getenv() 和 putenv() 不是一个线程安全的函数,意味着如果两个线程同时调用这个函数,就会出现问题。而且服务器的环境正好是:Apache + worker 模式,这种模式下,php 运行环境是以线程模式运行的,所以才出现了上述的问题。
2、Lavarel 应用突然无法登录
Laravel 登录报错 Crypt : The Mac is invalid
原因分析:Windows 下的 .env 没加载上,导致系统底层的加密解密功能出错。
3、Laravel 不支持高并发
用 $.post 刷一个 url 的时候(用鼠标点按钮触发,大概一秒钟 3、4 次),按这个速度,大概每隔个十几二十次,就会报一个 500 错误:Whoops, looks like something went wrong.
原因分析:运行环境问题,尽量不要用 windows 作为运行环境,可以使用 homestead。
4、.env 不支持中文
能通过 .env 写入 Environment,getenv() 函数调用不出来。具体而言,在使用 laravel 开发的过程中,把项目名称放入了 .env 配置文件里面再用 env() 方法调用,发现三个中文的情况下只能返回 default 值。
原因分析:在 Mac 上能正常,Windows上三个字不能显示。
三、Laravel简介
1、什么是Laravel
Laravel是当今最熟练,流行和广泛使用的开源框架之一。Laravel具有多种功能,例如模板引擎,MVC架构支持,安全性高,开发者工具,数据库迁移等。这些Laravel高级功能使它比其他PHP框架更好。它为高端Web应用程序开发提供了基准测试和功能丰富的解决方案。该框架已完全落实,并提供了有效使用它所需的优异实践。
2、为什么要使用Laravel
Laravel是精确的PHP框架,可以无缝满足各种规模的开源应用程序开发需求,也是开发人员的理想选择。其庞大的社区支持可快速解决编程问题。此外,它还提供学习论坛。Laravel由于出色和丰富的功能,Laravel已成为较好的PHP框架。比如开发公司可以通过laravel的高级功能来创建引人入胜且基于高性能的Web应用程序。他们可以极少的使用重复编码任务来做到这一点。
3、Laravel的优势
Laravel框架可以实现身份验证而无后顾之忧。一切均已正确配置为组织良好的授权逻辑以及所需的对各种资源的控制访问权限。该框架通过SwiftMailer库提供了一个干净,易于使用的API。Laravel还提供了驱动程序,允许应用程序快速启动,通过本地或启用云的服务发送邮件或通知。Laravel支持流行的缓存后端,因此开发人员可以快速配置缓存。Laravel与先进的Monolog日志库集成在一起,对开发人员很有帮助,该库为一系列强大的日志处理程序提供技术支持。每个Laravel路由都在app / Http / routes.php文件中定义,该文件由框架自动加载。它还通过接受URL和闭包并提供了一种强大的方法来标识路由方式。延伸阅读1:常见PHP框架
LaravelCodeIgniterSymfonyCakePHPYiiZend Framework
猜你喜欢LIKE
相关推荐HOT
更多>>
RESTful API的命名有什么讲究?
一、RESTful API的命名有什么讲究和目录没关系,通常是框架路由接管的 request uri解析出来的(v1、v2有可能是实际的目录)restful规范/资源名/...详情>>
2023-10-18 23:56:05
文件系统和数据库是由于什么原因才选择B树或B+树建立?
一、文件系统和数据库是由于什么原因才选择B树或B+树建立索引的索引的目标是要找到数据所在的物理位置,因此用树去实现搜索数据所在物理位置,...详情>>
2023-10-18 22:55:19
mysql如果单表数据量过千万怎么办?
一、mysql如果单表数据量过千万怎么办方案概述方案一:优化现有mysql数据库。优点:不影响现有业务,源程序不需要修改代码,成本最低。缺点:有...详情>>
2023-10-18 22:33:40
数据库表名、字段名用中文有什么问题?
一、数据库表名、字段名用中文的问题1、兼容性问题某些数据库管理系统(DBMS)可能不支持使用中文作为表名和字段名,或者对于中文的支持有限。...详情>>
2023-10-18 21:09:43热门推荐
RESTful API的命名有什么讲究?
沸KEGG 怎么用?
热文件系统和数据库是由于什么原因才选择B树或B+树建立?
热mysql如果单表数据量过千万怎么办?
新什么情况下需要使用分布式数据库?
为什么Cassandra的写速度比MySQL快?
数据库表名、字段名用中文有什么问题?
数据库文件存放在NAS中,会有什么问题吗?
多线程并发访问数据库中不同记录时应该采用什么办法?
为什么mysql要额外加入一个utf8mb4数据类型,而不是原地升级utf8?
PolarDB-X与PolarDB的关键区别是什么?
Mysql、SQLite、Mongo的区别?
为什么用Go语言做Web应用开发框架?
什么是i.MXRT11xx上的串行NOR Flash双程序可交替启动?
技术干货






