Symfony4.4应用部署alwaysdata报filemtime() stat失败错误
Symfony 4.4 生产环境
filemtime(): stat failed for报错修复方案 - 首先纠正错误的Composer操作:生产环境禁止执行
composer update,该命令会按版本约束自由升级依赖,直接导致本地与服务器依赖版本不一致、文件缺失。你需要先在本地WAMP环境的项目根目录确认所有依赖版本稳定,将本地生成的composer.lock、完整的项目源码(不含本地var目录下的缓存、日志文件)通过FileZilla以二进制模式重新上传覆盖服务器端文件,之后在服务器项目根目录执行composer install --no-dev --optimize-autoloader,严格按照lock文件安装匹配版本的生产依赖。 - 清理重建生产缓存:该报错90%以上的诱因是缓存残留、缓存文件传输不全。直接手动删除服务器项目下
var/cache/prod目录的全部内容,不要保留任何本地传输过去的旧缓存文件,之后执行缓存预热命令:php bin/console cache:clear --env=prod --no-debug。执行完成后确认var目录权限为755,所有者与PHP运行进程用户一致,保证Web服务进程有读写权限。 - 修正站点根目录配置:alwaysdata默认站点根目录为
www文件夹,而Symfony 4.4的Web入口在项目的public目录下,如果没有将站点根目录指向public,Symfony会出现路径解析错误,找不到目标文件触发stat调用失败。你需要登录alwaysdata的站点管理后台,将对应站点的Document Root修改为项目路径下的public目录,不要指向项目根目录。 - 校验资源完整性:如果项目使用Webpack Encore打包前端资源,确认本地
public/build目录下的所有打包文件完整上传到服务器,不要缺失manifest.json、entrypoints.json这类核心资源映射文件,否则Symfony在调用asset函数查找资源时会因为找不到映射记录触发filemtime报错。 - 生成生产环境环境变量缓存:在服务器项目根目录执行
composer dump-env prod,会生成.env.local.php的环境变量缓存文件,避免生产环境反复解析.env文件出现的路径、参数读取异常。
注意:不要为了省事将
var、public目录权限设置为777,会带来严重的服务器安全风险,按照PHP运行用户配置对应读写权限即可。
内容的提问来源于stack exchange,提问作者dm_z
相关产品推荐
相关产品推荐

