Ubuntu服务器执行Django createsuperuser时报错django.db.utils.OperationalError: attempt to write a readonly database求助
Ubuntu服务器执行Django createsuperuser时报错django.db.utils.OperationalError: attempt to write a readonly database求助
嗨,我来帮你捋捋这个问题哈!
你遇到的这个报错核心原因其实很明确:你手动执行python3 manage.py createsuperuser时,当前登录的用户(应该是ubuntu用户)没有对sqlite3数据库文件的写入权限。虽然你把NGINX的运行用户设为了www-data,而且数据库文件和目录的权限也属于www-data,但你自己跑命令的时候是用当前用户身份操作的,这个用户没权限写数据库,所以就报错啦。
给你两个可行的解决方案:
方案一:用www-data身份执行创建命令
因为数据库的权限是归www-data的,直接切换到这个用户来运行命令就行:
sudo -u www-data python3 manage.py createsuperuser
这样就用有写入权限的身份操作数据库,应该就能顺利创建超级用户了。
方案二:临时调整权限让当前用户可写入
这个方法要注意安全,用完建议还原权限:
- 先给数据库文件添加其他用户的写入权限:
chmod o+w /home/ubuntu/.ssh/project/db.sqlite3
- 确保上级目录有执行权限(不然连进入目录都做不到):
chmod o+x /home/ubuntu/.ssh/project/
执行完这两步再跑python3 manage.py createsuperuser应该就没问题了。如果担心安全,创建完成后可以把权限改回去:
chmod o-w /home/ubuntu/.ssh/project/db.sqlite3
另外还有个小建议:把数据库放在.ssh目录里其实不太合适,.ssh主要是用来存SSH密钥的,建议把数据库移到项目的专属目录下,比如/home/ubuntu/project/db.sqlite3,这样权限管理更清晰,也更安全哦。
备注:内容来源于stack exchange,提问作者user1114030
相关产品推荐
相关产品推荐

