Laravel 在 Debian 上的错误排查步骤
一 快速定位与日志
- 查看 Laravel 应用日志:tail -f storage/logs/laravel.log,优先从最新错误入手,关注异常类名、消息、堆栈与发生位置。
- 调整环境以暴露错误:在 .env 中将 APP_DEBUG=true 仅用于开发环境;生产环境务必设为 false。
- 核对应用密钥:确保 APP_KEY 已生成(php artisan key:generate),否则会出现加密相关异常。
- 如仍无足够信息,可临时安装调试组件(仅开发):
- Laravel Debugbar:composer require barryvdh/laravel-debugbar --dev
- Laravel Telescope:composer require laravel/telescope 并运行 php artisan telescope:install 与迁移。
二 环境与依赖检查
- PHP 与扩展:确认已安装匹配 Laravel 版本的 PHP 及扩展(如 php-fpm php-mysql php-zip php-gd php-mbstring php-curl php-xml php-bcmath 等),并在 /etc/php/{version}/fpm/php.ini 中启用必要扩展(如 fileinfo、mbstring、openssl)。
- 版本匹配:Laravel 8.x 通常需要 PHP >= 7.3;更高版本 Laravel 需要相应更高的 PHP 版本,先核对官方要求。
- Composer 依赖:在项目根目录执行 composer install,确保 vendor/ 完整且无缺依赖。
- 目录权限:确保 storage 与 bootstrap/cache 可写,常见做法:
- sudo chown -R www-data:www-data storage bootstrap/cache
- sudo chmod -R 775 storage bootstrap/cache
- 配置核对:复制 .env.example 为 .env 并填写数据库连接等关键信息。
三 Web 服务器与 PHP-FPM 配置
- Nginx 最小可用配置要点:
- 根目录指向 /path/to/project/public
- 路由重写:try_files $uri $uri/ /index.php?$query_string;
- PHP 处理:include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php{version}-fpm.sock;
- 语法检查:sudo nginx -t 后再重启 Nginx。
- Apache 要点:启用 mod_rewrite,并确保 DocumentRoot 指向 public,目录允许 .htaccess 覆盖。
- 常见错误:路由 404、静态资源 403/404、空白页多半与根目录未指向 public 或重写规则缺失有关。
四 数据库与缓存
- 连接与迁移:核对 .env 中 DB_* 配置,执行 php artisan migrate 验证连接与迁移是否成功。
- 缓存一致性:修改配置或路由后执行 php artisan config:clear、cache:clear、view:clear、route:clear,避免旧配置/路由缓存导致的问题。
- 性能与常见限制:在 php.ini 中适当提升 upload_max_filesize、post_max_size、memory_limit、max_execution_time,并启用 opcache 以提升性能。
- 连接失败排查:除检查 .env 外,确认数据库服务运行、用户权限正确、网络/端口可达。
五 交互式调试与常见错误对照
- 交互式调试:
- Laravel Tinker:php artisan tinker,可在命令行中 DB::listen() 监听查询、使用 dump/dd 输出变量。
- 异常处理:在 App\Exceptions\Handler 的 report/render 方法中添加日志或自定义响应,便于定位。
- 常见错误与处理一览:
| 症状 |
高频原因 |
快速修复 |
| 500 且无明细 |
生产环境 APP_DEBUG=false |
临时改为 true 并查看 laravel.log |
| 页面空白 |
输出缓冲/错误被吞/权限不足 |
检查 storage 可写、关闭输出缓冲、查看日志 |
| 路由 404 |
Nginx 根目录或重写规则错误 |
根目录指向 public,配置 try_files 重写 |
| 数据库连接失败 |
.env 配置错误或权限不足 |
核对 DB_*、测试连接、授予权限 |
| Composer 依赖异常 |
网络或缓存问题 |
composer install --optimize-autoloader,必要时更换镜像源 |
| 权限被拒 |
storage/cache 不可写 |
chown/chmod 为 www-data 并设 775 |
| 上传/执行限制 |
php.ini 限制过低 |
提升 upload_max_filesize/post_max_size/memory_limit 等 |
安全提示
- 仅在开发环境启用 APP_DEBUG=true;上线前务必恢复 false,避免泄露敏感信息。