Django+Apache2部署AWS Ubuntu后出现Attempt to write a readonly database报错求助
Django + Apache2 部署写入数据库报错解决方案
你遇到的Attempt to write a readonly报错是SQLite数据库部署场景下的常见问题,按以下优先级排查即可解决:
检查数据库所在父目录的权限
SQLite写入数据时需要在数据库文件同级目录创建临时journal日志文件,仅修改数据库文件本身权限没用。Ubuntu环境下Apache默认运行用户为www-data,执行以下命令给目录授权:chown -R www-data:www-data /path/to/your/django/project/ chmod 755 /path/to/your/django/project/ chmod 644 /path/to/your/django/project/db.sqlite3不要长期使用777权限,存在严重安全隐患。
检查AppArmor权限拦截
Ubuntu默认启用AppArmor安全模块,可能会限制Apache对项目目录的写入权限,执行以下命令临时调整Apache的AppArmor规则为告警模式验证:aa-complain /usr/sbin/apache2
如果调整后写入正常,修改AppArmor的Apache规则,添加项目目录的读写权限即可。检查Django数据库配置路径
确认settings.py中DATABASES的NAME参数使用绝对路径,不要用相对路径。Apache运行时的工作目录和本地开发环境不同,相对路径可能会指向系统默认的只读目录。检查磁盘挂载参数
如果数据库存放在额外挂载的AWS EBS卷中,执行mount命令查看挂载参数,确认对应分区的挂载参数没有ro(只读)标识,如有则修改/etc/fstab配置,将挂载参数改为rw后重新挂载即可。
内容的提问来源于stack exchange,提问作者ElMatador
相关产品推荐
相关产品推荐

