使用我的 Django 应用程序,我可以很好地从数据库中读取数据。当应用程序无权访问该文件时,它给了我这个错误:
尝试写一个只读数据库
这是有道理的。所以我编辑了文件的权限,使Apache进程具有写权限。但是,我得到了这个神秘的错误,而不是它能够写入:
无法打开数据库文件
如果它有用,这里是整个输出:
Request Method: POST
Request URL: http://home-sv-1/hellodjango1/polls/1/vote/
Exception Type: OperationalError
Exception Value:
unable to open database file
Exception Location: /usr/lib/pymodules/python2.5/django/db/backends/sqlite3/base.py in execute, line 193
Python Executable: /usr/bin/python
Python Version: 2.5.2
Python Path: ['/var/www', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/pymodules/python2.5', '/usr/lib/pymodules/python2.5/gtk-2.0']
Server time: Sun, 23 Aug 2009 07:06:08 -0500
让我知道是否需要堆栈跟踪。
啊哈,刚刚偶然发现一篇解释这一点的文章。Django 在他们的NewbieMistakes页面上也有信息。
解决方案是确保包含数据库文件的目录也允许对该进程进行写访问。
在我的例子中,运行这个命令解决了这个问题:
使用新手错误Django wiki页面的SQLite3部分时,Django 说“无法打开数据库文件” :
db
目录的完整路径存在/tmp
目录是世界可写的settings.py
路径是完整路径我对此的解决方案更像这样。我真的不想改变这个目录的所有权。(主要是因为我使用 pi 用户来做 git 之类的事情)
(或您正在使用的任何数据库)
其中 pi 是我在其中创建所有文件的用户。(是的,这是一个树莓派)
我发现我只需要像这样更改权限,而不是更改对 www-data 的权限:
这使组可以对必要的文件进行写访问,并将 www-data 用户添加到 pi 组。
注意:如果您有日志记录,您也需要为 django 日志文件执行此操作,否则 apache 不会很喜欢它。
将操作用户添加到 www-data 组在我的测试环境中运行良好。此外,为了更安全,我将 sqlite3.db 文件放入单独的子文件夹中。
数据库文件应归 www-data 所有
我的运营用户 hape 获得了 www-data 组的成员:
允许对组 www-data 的成员进行数据库文件写入访问:
因此,可以通过 apache2-daemon(用户 www-data)读写访问数据库,而无需授予项目根文件夹的权限,并且 - 另一方面 - 应用程序可以由操作人员在开发模式下运行用户喜欢,例如
还。
对于Windows 7、8.1、10 、Server 2012 等,请遵循Bonobo 安装说明:
允许 IIS 用户修改 C:\inetpub\wwwroot\Bonobo.Git.Server\App_Data 文件夹。
为此:
借用SO问题:https ://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
假设文件由 apache 用户拥有以启动:
ACLs
为用户/组 pi设置:您可以看出权限位上有一个
ACL
with ,即结尾的“+”:ls -l
开发服务器需要以对数据库文件夹具有写入权限的同一用户身份运行,因此如果您最初以 root 身份创建数据库,则在运行时需要是 root 用户:
在工作目录中创建一个子目录
在子目录中创建 sqlite 数据库
将子目录的所有者更改为 debain 中的 www-data 或 centOS 中的 apache
喝杯冰镇啤酒,因为你已经完成了。
P/S:检查程序是否成功
你应该看到这样的
写
sudo sqlite3 databaseFilename.sql
就行了