项目是正常运行的,平常也使用phpstorm 上传文件,今天使用 phpstorm 上传代码后就立即报错了,Error while injecting dependencies into app\strategy\StrategyFactory: No entry or class found for 文件名称 ;
process配置是这样子的
后面是重新执行了命令 reload 报错才停止,有没有什么办法解决这个问题,代码上传后可以立即更新reload,并且不影响系统的其他逻辑。
或者只能是关闭自动更新reloading,每次更新代码后都手动执行reload 命令 。
各位大佬有没有遇到过这种情况,有没有那种解决方法是最好的。
非常感谢!谢谢各位老板。
修改 enable_file_monitor 为false 后,webman.log 日志文件的确是没有 reloading 指令了,但是 上传的代码还是会更新,不知道会不会有影响?那是不是就不用再手动执行 reload 了?
phpstorm 上传会有一个新旧代码替换过程,在这个过程中可能会有这样一个状态:一部分代码是新的,要加载某个新的类,这个类文件还在传输队列,没传上来,导致类找不到。
建议使用git管理代码,使用git更新。
或者关闭文件更新检测(
process.monitor.constructor.options.enable_file_monitor
设为false
)。问题来了,我把文件上传了两次,webman.log 看到了两次 reloading ,但是代码还是报错。另外的一个项目的情况是 ,上传了代码 A 类 ,A类引入了B类, B类的方法已经没有在A类中使用了,更新 A类的时候 ,造成其他地方使用B类的方法找不到,Call to a member function besy() on null , ; 现在为了防止项目出错 ,都是 上传代码后得马上重新去执行 命令reload 。
小公司的项目,没有部署git ,是不是直接修改 enable_file_monitor 配置为 false ,然后每次上传完代码,再去重新 reload 就可以了 ?
对,关闭enable_file_monitor ,手动reload
如新增的图片,大佬,测试 设置 enable_file_monitor 为 false 后,为了起效我重新执行了 restart -d ,然后修改代码上传,关联一个订单状态的查询,测试上传的代码更新了,执行查询有数据,关闭后上传查询没有关联数据,那是不是说 我后续都不用 重新手动 reload 代码就起效了?上传文件后webman.log的确是没有reloading 指令了, 那感觉不太对呀 。
类文件是动态载入的,框架发现某个类不存在才会去磁盘加载。重启后所有的控制器类都没有被加载,你测试的时候才会去加载,这时候已经被你更新了,新代码就起作用了。关闭enable_file_monitor更新代码后手动执行reload最保险。