Artisan发布Sanctum时提示成功但未生成迁移文件问题咨询
问题排查与解决方法
vendor:publish命令本身不会校验源目录文件是否存在、目标目录写入是否实际同步,只要匹配到对应资源路径就会输出发布成功提示,这类假成功一般是三个原因导致:
- 依赖安装损坏,vendor目录下Sanctum的配置、迁移源文件本身缺失或为空
- 命令存在发布缓存,识别到该资源曾发布过就跳过实际复制动作
- Sail环境目录挂载异常,容器内写入的文件没有同步到本地宿主机
排查步骤
1. 校验Sanctum依赖文件完整性
先进入Sail容器,执行以下命令检查源文件是否存在:
# 检查迁移源文件 ls -la vendor/laravel/sanctum/database/migrations # 检查配置源文件 ls -la vendor/laravel/sanctum/config/sanctum.php
如果上述路径不存在、或migrations目录为空,说明依赖拉取损坏,执行以下命令重装Sanctum:
composer require laravel/sanctum:2.15 --with-all-dependencies
2. 强制重新发布资源
publish命令默认会跳过已标记为发布过的资源,添加--force参数强制覆盖发布:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" --force
3. 排查Sail目录挂载问题
执行完强制发布后,先在容器内检查目标路径是否已生成对应文件:
# 检查迁移文件 ls database/migrations | grep sanctum # 检查配置文件 ls config | grep sanctum.php
如果容器内能看到对应文件,但本地宿主机目录找不到,先重建Sail容器挂载:
# 退出容器后在本地项目目录执行 ./vendor/bin/sail down ./vendor/bin/sail up -d
如果重建后仍无法同步,检查本地项目目录权限,将目录所属用户调整为与Sail运行用户一致的uid(默认值为1000):
sudo chown -R 1000:1000 ./
补充说明
Laravel 9.x搭配Sanctum 2.15版本时,框架默认会自动加载Sanctum自带的迁移文件,无需手动发布迁移即可直接执行php artisan migrate生成personal_access_tokens表。如果需要自定义迁移逻辑,发布迁移文件后,可在AppServiceProvider的boot方法中添加以下代码,忽略默认自带的迁移,使用自定义发布的版本:
use Laravel\Sanctum\Sanctum; public function boot() { Sanctum::ignoreMigrations(); }
内容的提问来源于stack exchange,提问作者wuyabai
相关产品推荐
相关产品推荐

