React/Django应用部署至Heroku后本地用户丢失,如何找回或创建管理员账号
问题原因
- Heroku 采用临时文件系统,每次dyno实例重启、或是执行
heroku run类命令时,都会初始化一个独立的临时运行环境,所有文件修改都会在命令执行结束后丢失。你使用的Sqlite是单文件型数据库,本身不适合在这类无持久化文件存储的平台使用,你本地的Sqlite数据库文件不会自动同步到部署环境,就算手动上传,后续所有数据修改也会在实例重启后丢失。 - 你之前执行的
makemigrations和migrate命令仅会创建数据库表结构,不会同步本地库中的实际用户数据,且命令执行在独立临时环境中,生成的数据库文件后续也无法被你的正式应用访问到。
解决方案
临时解决:快速创建可用管理员账号
注意:该方法创建的账号会在dyno重启后丢失,仅适合临时调试使用
直接在Heroku运行环境中执行Django创建超级用户命令即可:
heroku run python manage.py createsuperuser
按照提示输入用户名、邮箱、密码,完成后直接用该账号登录即可。
长期解决:更换持久化数据库实现数据同步
要彻底解决数据不持久、本地账号无法同步的问题,需要将Sqlite替换为Heroku提供的PostgreSQL持久化数据库服务:
- 开通Heroku Postgres附加组件,Django会自动识别平台注入的
DATABASE_URL环境变量,无需大量修改配置即可适配 - 本地端执行
python manage.py dumpdata > data.json,将本地数据库的所有用户及其他数据导出为json格式文件 - 重新部署应用后执行
heroku run python manage.py loaddata data.json,即可将本地原有账号等数据同步到线上持久化数据库中,后续所有数据修改都会永久存储,不会因为实例重启丢失
内容的提问来源于stack exchange,提问作者Laspeed
相关产品推荐
相关产品推荐

