我刚刚用
创建了一个Django项目python manage.py startapp smartrecruitment
然后我运行了db sync
python manage.py syncdb
Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
并添加了我的超级用户,但我无法在浏览器中访问/ admin。我尝试过以下命令来授予apache权限,但没有运气。
sudo chown apache <folder_containing_db.sqlite3>
sudo chown apache db.sqlite3
答案 0 :(得分:10)
更改项目目录和数据库文件的所有者www-data
chown www-data:www-data /home/username/Django
chown www-data:www-data /home/username/Django/db.sqlite
答案 1 :(得分:3)
您确实存在用户/组权限问题:您需要使用对您的db文件具有读/写访问权限的用户运行您的Web服务器(使用sqlite3时)
更改整个项目的所有者和组是一个坏主意,因为它允许您的Web服务器用户在您的代码库上编写,这绝不是一个好习惯。
更好的想法是在生产中使用真实数据库而不是sqlite来避免这种情况。
https://docs.djangoproject.com/en/1.9/ref/settings/#databases
如果你想坚持使用sqlite:将你的sqlite文件放在你的项目存储库之外并给它和包含目录正确的读/写访问(例如只有www-data可以写,但是你需要运行你的django命令为www-data)
some_dir [your_user:your_group]
--- your_django_project [github_user:github_user]
--- another_dir [www-data:www-data]
|--- db.sqlite3 [www-data:www-data]
您的网络服务器(apache / nginx)以www-data
运行答案 2 :(得分:1)
我正在寻找解决方案,因为我通过此链接关注了CentOS教程。 https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-centos-7
以下是该教程的权限,
sudo usermod -a -G root apache
chmod 710 /root/myproject
chown apache:apache /root/myproject
chown apache:apache /root/myproject/db.sqlite
答案 3 :(得分:-1)
简而言之,当写入sqlite数据库的应用程序没有写入权限时,就会发生这种情况。
这可以通过三种方式解决:
db.sqlite3
) chown username db.sqlite3
文件及其父目录的所有权(从而也可以写访问权限)
sudo -i
或django gunicorn
之前运行命令runserver
) chmod 777 db.sqlite3
(危险选项) 注意强>: 除非您在本地计算机上运行Web服务器,否则永远不会选择第三个选项,或者数据库中的数据对您来说并不重要。
第二种选择也很危险,因为@mateuszb说。 Django的代码注入风险非常低,因为Django是以这种方式设计的。在Django中,只有当开发人员使用eval
或exec
编写非常容易受到攻击的代码时,才能捕获整个操作系统。如果您对代码质量没有信心,或者甚至不知道代码注入是什么,则第二个选项不适合您。
此外,如果您使用的是mysql和Postgres等数据库,则不会发生此错误。对于流量较大的网络服务器来说,Sqlite不是一个好的选择。