AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 57596
Accepted
Nick Bolton
Nick Bolton
Asked: 2009-08-24 04:08:59 +0800 CST2009-08-24 04:08:59 +0800 CST 2009-08-24 04:08:59 +0800 CST

为什么我会收到 sqlite 错误,“无法打开数据库文件”?

  • 772

使用我的 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
  • 9 9 个回答
  • 270024 Views

9 个回答

  • Voted
  1. Best Answer
    Nick Bolton
    2009-08-24T04:14:14+08:002009-08-24T04:14:14+08:00

    啊哈,刚刚偶然发现一篇解释这一点的文章。Django 在他们的NewbieMistakes页面上也有信息。

    解决方案是确保包含数据库文件的目录也允许对该进程进行写访问。

    在我的例子中,运行这个命令解决了这个问题:

    sudo chown www-data .
    
    • 88
  2. ssc
    2010-01-15T14:43:08+08:002010-01-15T14:43:08+08:00

    使用新手错误Django wiki页面的SQLite3部分时,Django 说“无法打开数据库文件” :

    1. 确保 Apache 也可以写入数据库的父目录
    2. 确保数据库文件的完整路径的所有文件夹都不以数字开头
    3. 确保db目录的完整路径存在
    4. 确保你的/tmp目录是世界可写的
    5. 确保指定的数据库settings.py路径是完整路径
    6. 确保路径中没有特殊字符
    7. 在 Windows 上,确保 db 目录路径用双反斜杠编写
    • 7
  3. SpiRail
    2013-01-03T15:08:10+08:002013-01-03T15:08:10+08:00

    我对此的解决方案更像这样。我真的不想改变这个目录的所有权。(主要是因为我使用 pi 用户来做 git 之类的事情)

    /var/www/mysite $ ls -la sql*
    -rw-rw-r-- 1 pi       pi       25600 Jan  2 22:57 sqlite.db
    

    (或您正在使用的任何数据库)

    其中 pi 是我在其中创建所有文件的用户。(是的,这是一个树莓派)

    我发现我只需要像这样更改权限,而不是更改对 www-data 的权限:

    sudo chmod 775 /var/www/mysite
    sudo chmod 664 /var/www/mysite/sqlite.db
    sudo usermod -a -G pi www-data
    

    这使组可以对必要的文件进行写访问,并将 www-data 用户添加到 pi 组。

    注意:如果您有日志记录,您也需要为 django 日志文件执行此操作,否则 apache 不会很喜欢它。

    • 7
  4. Hartmut Pfarr
    2013-04-15T04:22:03+08:002013-04-15T04:22:03+08:00

    将操作用户添加到 www-data 组在我的测试环境中运行良好。此外,为了更安全,我将 sqlite3.db 文件放入单独的子文件夹中。

    数据库文件应归 www-data 所有

    sudo chown www-data mysite/db_sqlite3/
    sudo chown www-data mysite/db_sqlite3/my.db
    

    我的运营用户 hape 获得了 www-data 组的成员:

    sudo usermod -a -G www-data hape
    

    允许对组 www-data 的成员进行数据库文件写入访问:

    sudo chmod u+w+x,g+w+x mysite/db_sqlite3/
    sudo chmod u+w+x,g+w+x mysite/db_sqlite3/my.db
    

    因此,可以通过 apache2-daemon(用户 www-data)读写访问数据库,而无需授予项目根文件夹的权限,并且 - 另一方面 - 应用程序可以由操作人员在开发模式下运行用户喜欢,例如

    ./manage.py runserver
    

    还。

    • 5
  5. DEXTER360
    2015-11-12T12:23:46+08:002015-11-12T12:23:46+08:00

    解决方案是确保包含数据库文件的目录也允许对该进程进行写访问。

    对于Windows 7、8.1、10 、Server 2012 等,请遵循Bonobo 安装说明:

    允许 IIS 用户修改 C:\inetpub\wwwroot\Bonobo.Git.Server\App_Data 文件夹。

    为此:

    1. 选择 App_Data 文件夹的属性,
    2. 转到安全选项卡,
    3. 点击编辑,
    4. 选择 IIS 用户(在我的情况下为 IIS_IUSRS)并添加修改和写入权限,
    5. 使用应用按钮确认这些设置。
    • 2
  6. slm
    2013-01-05T05:22:12+08:002013-01-05T05:22:12+08:00

    借用SO问题:https ://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue

    假设文件由 apache 用户拥有以启动:

    % chown -R apache.apache /var/www/mysite
    

    ACLs为用户/组 pi设置:

    % setfacl -d -m u:pi:rwx /var/www/mysite
    % setfacl -d -m g:pi:rwx /var/www/mysite
    
    % getfacl /var/www/mysite
    # file: /var/www/mysite
    # owner: apache
    # group: apache
    user::rwx
    group::r-x
    other::r-x
    default:user::rwx
    default:user:pi:rwx
    default:group::r-x
    default:group:pi:rwx
    default:mask::rwx
    default:other::r-x
    

    您可以看出权限位上有一个ACLwith ,即结尾的“+”:ls -l

    # ls -la /var/www
    drwxr-xr-x   3 apache   apache   80 26. Nov 12:43 .
    drwxrwxrwt  15 root     root 360 26. Nov 12:40 ..
    drwxrwxr-x+  2 apache   apache   40 26. Nov 12:43 mysite
    
    • 1
  7. Kilizo
    2011-12-20T01:35:57+08:002011-12-20T01:35:57+08:00

    开发服务器需要以对数据库文件夹具有写入权限的同一用户身份运行,因此如果您最初以 root 身份创建数据库,则在运行时需要是 root 用户:

    python manage.py runserver
    
    • 0
  8. brotich
    2014-06-18T14:49:53+08:002014-06-18T14:49:53+08:00

    在工作目录中创建一个子目录

    mkdir db-folder 
    

    在子目录中创建 sqlite 数据库

    sqlite3 db-folder/db.db
    

    将子目录的所有者更改为 debain 中的 www-data 或 centOS 中的 apache

    chown -R www-data db-folder
    

    喝杯冰镇啤酒,因为你已经完成了。

    P/S:检查程序是否成功

    ls -l data-folder
    

    你应该看到这样的

    -rw-r--r-- 2 www-data root 4096 Jun 18 01:38 data-folder
    
    • 0
  9. Alireza
    2017-01-03T23:21:16+08:002017-01-03T23:21:16+08:00

    写sudo sqlite3 databaseFilename.sql就行了

    • -2

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • 哪个 Apache 包最适合 mod_wsgi Django 应用程序?

  • 设置 Django 服务器以服务多个站点的最佳方式是什么?

  • 哪个最适合 Django?Lighttpd 还是 Nginx?或者也许是别的什么?[关闭]

  • 如何向运行共享 IIS 服务器的 Python 新手解释 Django/Python 安装 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve