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

Google Cloud部署的Django应用无法通过Admin后台手动创建用户认证令牌

解决GAE上Django Admin生成认证令牌的500错误问题

问题背景

你在Google Cloud App Engine上部署了基于Django框架+DRF的用户账号系统,本地测试一切正常,但在生产环境中通过Django Admin后台为用户手动生成认证令牌时,出现了500错误,错误日志显示核心问题是数据库中缺少authtoken_token表。

为什么会出现这个问题?

DRF的rest_framework.authtoken依赖一个名为authtoken_token的数据库表来存储用户令牌,这个表是通过Django的迁移命令创建的。本地测试时你应该已经执行过migrate命令生成了这个表,但生产环境的Google Cloud SQL数据库并没有同步执行这些迁移操作,导致Admin后台访问时找不到对应表,触发500错误。

具体解决步骤

1. 确认迁移文件存在

首先,rest_framework.authtoken作为第三方应用,自带了迁移文件,不需要你手动编写。但要确保你的项目已经包含了这些迁移的记录,本地可以先运行:

python manage.py showmigrations authtoken

如果输出里有未应用的迁移,说明需要推送到生产环境执行。

2. 在GAE生产环境执行数据库迁移

有两种常用方式可以完成这个操作:

方式一:通过Cloud Shell直接执行

  1. 打开Google Cloud Console的Cloud Shell,切换到你的项目代码目录(如果是通过Git拉取的,先确保代码是最新版本)。
  2. 进入App Engine的交互式shell:
    gcloud app shell
    
  3. 在shell中执行迁移命令:
    python manage.py migrate
    

方式二:部署时自动执行迁移

你可以修改app.yaml文件,让GAE在启动应用前自动执行迁移,避免每次手动操作:

runtime: python39
# 修改entrypoint,先执行迁移再启动服务
entrypoint: bash -c "python manage.py migrate --noinput && gunicorn -b :$PORT DjangoServer.wsgi:application --preload"
handlers:
  - url: /static
    static_dir: static/
  - url: /.*
    script: auto

然后重新部署应用:

gcloud app deploy

--noinput参数是为了在生产环境避免交互式确认,确保迁移自动完成。

3. 验证修复效果

迁移完成后,重新登录Django Admin后台,尝试为用户生成认证令牌,应该不会再出现500错误。你也可以通过Google Cloud Console的Cloud SQL面板,查看数据库中是否已经存在authtoken_token表,确认迁移成功。

额外提醒

  • 确保你的GAE服务账号拥有Cloud SQL的读写权限,否则迁移时可能会出现权限错误。
  • 后续每次更新Django模型、添加新的第三方应用后,都要记得在生产环境执行migrate命令,保持数据库结构同步。
  • 生产环境建议使用--noinput参数执行迁移,避免因交互式操作导致部署失败。

内容的提问来源于stack exchange,提问作者Rodrigo Alberto Guerrero Bermúdez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:37:39