You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:33:06