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

部署在App Engine的Django应用登录时出现只读数据库写入错误

解决App Engine标准环境Django登录时的'readonly database'错误

嘿,这个坑我踩过!咱们直接说核心问题:App Engine标准环境的文件系统是完全只读的,而你现在用的SQLite数据库是把数据存在本地的db.sqlite3文件里——登录操作需要写入数据库(比如创建用户会话、更新登录状态),但App Engine不允许修改本地文件,所以就触发了这个只读错误。

为什么其他功能正常?

那些功能大概率只是做了读取数据库的操作(比如展示内容),不需要写入本地文件,所以没触发限制;而登录涉及写入,直接撞在了只读文件系统的规则上。

怎么解决?

必须换掉SQLite,改用支持云端写入的数据库,Google官方推荐用Cloud SQL(适配App Engine的托管数据库服务),步骤如下:

  1. 创建Cloud SQL实例
    选MySQL或者PostgreSQL都可以(Django对两者都有很好的支持),记住实例的项目ID、区域、数据库名、用户名和密码。

  2. 修改settings.py的数据库配置
    删掉原来的SQLite配置,换成对应数据库的配置:

    • 如果你选MySQL:
      import os
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': os.environ.get('DB_NAME'),
              'USER': os.environ.get('DB_USER'),
              'PASSWORD': os.environ.get('DB_PASSWORD'),
              'HOST': f'/cloudsql/{os.environ.get('CLOUD_SQL_CONNECTION_NAME')}',
              'PORT': '3306',
          }
      }
      
    • 如果你选PostgreSQL:
      import os
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.postgresql_psycopg2',
              'NAME': os.environ.get('DB_NAME'),
              'USER': os.environ.get('DB_USER'),
              'PASSWORD': os.environ.get('DB_PASSWORD'),
              'HOST': f'/cloudsql/{os.environ.get('CLOUD_SQL_CONNECTION_NAME')}',
              'PORT': '5432',
          }
      }
      

    (建议用环境变量存敏感信息,不要硬编码在settings里)

  3. 添加数据库驱动到requirements.txt

    • MySQL需要加:mysqlclient==2.2.0
    • PostgreSQL需要加:psycopg2-binary==2.9.9
  4. 配置Cloud SQL访问权限
    确保App Engine的服务账号有Cloud SQL Client的权限,这样你的应用才能连接到Cloud SQL实例。

  5. 部署前初始化数据库
    本地或者用Cloud Shell跑python manage.py migrate,把Django的表结构同步到Cloud SQL里。

额外提醒

你原来SQLite配置里的USER和PASSWORD参数是没用的——SQLite本身不需要用户名密码验证,这些配置项会被忽略,以后不用加啦。

内容的提问来源于stack exchange,提问作者russianmax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:43:12