Symfony部署Infomaniak后Leaflet地图标记不显示、筛选失效求助
排查步骤
- 优先定位服务端500错误根因
SSH登录Infomaniak服务器,进入项目根目录后执行tail -n 100 var/log/prod.log查看生产环境最新错误日志,重点排查三类问题:数据库异常:检查生产环境
.env/.env.local配置的数据库账号、地址、权限是否正确,是否已同步本地开发库的标记点位数据,生产库用户没有对应表的查询权限、点位数据未同步都会触发查询抛出500
路由不匹配:Symfony生产模式不会自动加载注解路由变更,未清理缓存时新路由不会生效,可先执行php bin/console debug:router --env=prod查看筛选接口的路由是否存在
依赖缺失:确认部署时已执行composer install --no-dev --optimize-autoloader安装所有生产环境依赖,点位接口依赖的序列化组件、ORM组件缺失会直接抛出异常 - 直接验证接口可用性
在浏览器地址栏直接访问筛选接口的完整生产地址,若返回404,执行php bin/console cache:clear --env=prod清理生产缓存即可;若返回500,对照第一步日志的错误栈修复对应问题。 - 校验数据格式匹配度
若接口可正常返回JSON数据,对比生产环境和本地返回的字段结构:
Infomaniak的服务器为Linux系统,文件、字段大小写敏感度远高于本地Windows/macOS开发环境,若后端返回的经纬度字段名、年份字段大小写和前端map.js的读取逻辑不一致,会导致前端无报错但标记不渲染、筛选无响应。 - 排查跨域配置问题
若控制台同时报跨域错误,检查Symfony的CORS配置(如NelmioCorsBundle)是否已添加生产域名到允许列表,本地开发环境一般放行了localhost跨域,上线未更新配置会拦截前端fetch请求。
常见修复方案
- 缓存问题:将生产缓存清理命令写入部署脚本,每次SSH部署完成后自动执行
php bin/console cache:clear --env=prod - 序列化错误:若日志提示循环引用异常,给
ApiController的序列化逻辑添加循环引用忽略配置,开发环境dev模式会忽略该警告,生产模式默认抛出500 - 权限问题:确认
var/public/目录的权限设置为755,Symfony生产环境需要读写var/目录生成缓存、日志,权限不足也会触发500错误
内容的提问来源于stack exchange,提问作者Yukiliam
相关产品推荐
相关产品推荐

