Python Django登录错误:";尝试写入只读数据库;
我试图在CentOS 6上安装Apache(2.4,从源代码构建)+Django(1.8.12),但当我尝试登录到我的站点或创建用户或其他写入DB的内容时,我收到一个错误: 尝试写入只读数据库 我已经尝试:Python Django登录错误:";尝试写入只读数据库;,python,django,apache,sqlite,centos,Python,Django,Apache,Sqlite,Centos,我试图在CentOS 6上安装Apache(2.4,从源代码构建)+Django(1.8.12),但当我尝试登录到我的站点或创建用户或其他写入DB的内容时,我收到一个错误: 尝试写入只读数据库 我已经尝试: 将db文件的所有者更改为apache用户(不可用) 更改权限:775774664给出与上述相同的错误;666776给出: 无法打开数据库文件 使用django项目对整个文件夹执行相同的操作 我遵循了教程 我的httpd.conf(我添加的部分): UPD 2 /tmp权限: drwx
- 将db文件的所有者更改为apache用户(不可用)
- 更改权限:775774664给出与上述相同的错误;666776给出:
- 使用django项目对整个文件夹执行相同的操作
/tmp
权限:
drwxrwxrwt 6 root root 4096 Apr 22 10:06 tmp
settings.py数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
错误页面中的数据库部分:
DATABASES {'default': {'ATOMIC_REQUESTS': False,
'AUTOCOMMIT': True,
'CONN_MAX_AGE': 0,
'ENGINE': 'django.db.backends.sqlite3',
'HOST': '',
'NAME': '/var/www/project/db.sqlite3',
'OPTIONS': {},
'PASSWORD': '********************',
'PORT': '',
'TEST': {'CHARSET': None,
'COLLATION': None,
'MIRROR': None,
'NAME': None},
'TIME_ZONE': 'UTC',
'USER': ''}}
看起来像是权限问题。db文件上的权限777应该有效-这样您就可以将所有访问权限授予所有用户。然而。。。如果要编辑,则会创建其他
日志
文件,因此用户需要编辑目录。Apache用户可以是Apache
或nobody
看起来像权限问题。db文件上的权限777应该有效-这样您就可以将所有访问权限授予所有用户。然而。。。如果要编辑,则会创建其他日志
文件,因此用户需要编辑目录。Apache用户可以是Apache
或nobody
事实上,这并不是一个登录错误。当写入sqlite数据库的应用程序没有写入权限时,就会发生这种情况。由于登录是第一次尝试写入数据库,所以您将其视为登录错误
这可以通过三种方式解决:
chown username db.sqlite3
)将db.sqlite3
文件及其父目录的所有权授予用户gunicorn
、apache
或djangorunserver
之前运行命令sudo-i
)chmod 777 db.sqlite3
(危险选项)允许所有用户进行读写访问此外,如果您使用的是mysql和Postgres之类的数据库,则不会发生此错误。Sqlite对于流量大的Web服务器不是一个好的选择。事实上,它实际上不是一个登录错误。当写入sqlite数据库的应用程序没有写入权限时,就会发生这种情况。由于登录是第一次尝试写入数据库,所以您将其视为登录错误 这可以通过三种方式解决:
chown username db.sqlite3
)将db.sqlite3
文件及其父目录的所有权授予用户gunicorn
、apache
或djangorunserver
之前运行命令sudo-i
)chmod 777 db.sqlite3
(危险选项)允许所有用户进行读写访问此外,如果您使用的是mysql和Postgres之类的数据库,则不会发生此错误。Sqlite对于流量大的Web服务器来说不是一个好的选择。我也遇到过同样的问题,将数据库和目录的所有者更改为apache用户对我来说很有效(centos 7)
从开始,我就遇到了同样的问题,将数据库和目录的所有者更改为apache用户对我来说很有效(centos 7)
对于在Apache上运行的Django应用程序,您可以通过检查
apache2/conf/httpd.conf
文件找到运行Apache的用户
对于Bitnami Django堆栈,httpd.conf
文件显示:
User daemon
Group daemon
这将向您显示哪个用户正在运行apache
现在,要解决“尝试写入只读数据库”的问题,只需运行以下命令:
sudo chown {apache_user}:{apache_user} /path/django_project
sudo chown {apache_user}:{apache_user} /path/django_project/db.sqlite3
chown
命令将更改项目文件夹和数据库的所有权,从而允许服务器与其通信。对于在Apache上运行的Django应用程序,可以通过检查apache2/conf/httpd.conf
文件找到运行Apache的用户
对于Bitnami Django堆栈,httpd.conf
文件显示:
User daemon
Group daemon
这将向您显示哪个用户正在运行apache
现在,要解决“尝试写入只读数据库”的问题,只需运行以下命令:
sudo chown {apache_user}:{apache_user} /path/django_project
sudo chown {apache_user}:{apache_user} /path/django_project/db.sqlite3
chown
命令将更改项目文件夹和数据库的所有权,从而允许服务器与其通信。Temp目录应提供完全访问权限,因此请检查ls-ald
是否应返回类似于drwxrwt 11根目录4096 kwi 22 18:41/tmp
的内容。但是,如果apache能够工作,情况就不应该是这样。你能提供完整的堆栈跟踪吗?或也许db路径是相对的,这里遗漏了一些东西。这就解释了为什么manage可以工作,而wsgi却失败了。没有其他想法。问题已更新。但是我不明白,我应该在哪里做?这个命令的作用是什么?对不起-cd/tmp&&ls-ald--这个命令会转到您的临时目录,并检查权限。如果您的数据库是用相对路径定义的,您可以检查设置.py吗?还可以尝试调试,或者打印登录屏幕上db-at的完整db文件路径+状态。可以显示下一步的位置:)已更新<代码>/tmp
正常,DB用绝对路径定义。但我发现了一个乐趣
sudo chown {apache_user}:{apache_user} /path/django_project
sudo chown {apache_user}:{apache_user} /path/django_project/db.sqlite3