Django sqlite 拒绝了权限



我正在尝试在我的树莓派上运行一个 Django 项目。不过,我在传输以前计算机上的数据库时遇到了一些问题。

我尝试运行服务器,一切都运行顺利,直到我尝试登录。Django报告说它可以读取但不能写入/编辑文件。

我确保 db.sqlite3 上的所有权限都设置正确,但 Django 仍然无法修改它。它只能读取它。

-rwxr-xr-x 1 pi       pi   200704 Aug 10 04:13 db.sqlite3

上面的代码是我为文件设置的权限。 当我尝试登录时,它还说它无法读取或写入。任何解决此问题的建议将不胜感激,如果需要,我也可以发布其他信息。 谢谢

编辑 我的设置文件是(数据库部分(

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

将我的base_dir设置为

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

更新 我找到了另一个堆栈溢出问题的答案。 django.db.utils.OperationalError: 无法打开数据库文件

我需要在此处更改文件的权限,我之前搞砸了。

sudo chown $(whoami):$(whoami) /path/to/dir/db/db.sqlite3

这对我有用!

您可以通过确保 sqlite3 DB 文件及其父目录都具有读/写权限来绕过该权限问题。但是,如果这也是您的 Django 代码目录,那么 chmod 777 封闭目录就不是很好的安全实践。

对我有用的是在你的项目中创建一个目录,叫做dbspot,并将你的db.sqlite3移动到那里。 然后 chmod 777 该目录和里面的数据库文件。

确保更改 settings.py 以指向新位置。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'dbspot/db.sqlite3'),
}
}

如果你遵循了 Django 的建议,你的 django 项目 dir 和代码不会位于/var/www/或类似的东西中,而是你的私人区域,所以无论如何它都不会可见。

您还应该确保您的/tmp 目录是 777,但我怀疑它已经在 RPi 上。

最新更新