Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django登录错误:";尝试写入只读数据库;_Python_Django_Apache_Sqlite_Centos - Fatal编程技术网

Python Django登录错误:";尝试写入只读数据库;

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

我试图在CentOS 6上安装Apache(2.4,从源代码构建)+Django(1.8.12),但当我尝试登录到我的站点或创建用户或其他写入DB的内容时,我收到一个错误:

尝试写入只读数据库

我已经尝试:

  • 将db文件的所有者更改为apache用户(不可用)
  • 更改权限:775774664给出与上述相同的错误;666776给出:
无法打开数据库文件

  • 使用django项目对整个文件夹执行相同的操作
我遵循了教程

我的httpd.conf(我添加的部分):

UPD 2

/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(例如:
    chown username db.sqlite3
    )将
    db.sqlite3
    文件及其父目录的所有权授予用户
  • 以root用户身份运行web服务器(通常是gunicorn)(在运行
    gunicorn
    apache
    或django
    runserver
    之前运行命令
    sudo-i
  • 通过运行命令
    chmod 777 db.sqlite3
    (危险选项)
    允许所有用户进行读写访问
  • 除非您在本地计算机上运行Web服务器,或者数据库中的数据对您来说根本不重要,否则不要选择第三个选项


    此外,如果您使用的是mysql和Postgres之类的数据库,则不会发生此错误。Sqlite对于流量大的Web服务器不是一个好的选择。

    事实上,它实际上不是一个登录错误。当写入sqlite数据库的应用程序没有写入权限时,就会发生这种情况。由于登录是第一次尝试写入数据库,所以您将其视为登录错误

    这可以通过三种方式解决:

  • 使用chown(例如:
    chown username db.sqlite3
    )将
    db.sqlite3
    文件及其父目录的所有权授予用户
  • 以root用户身份运行web服务器(通常是gunicorn)(在运行
    gunicorn
    apache
    或django
    runserver
    之前运行命令
    sudo-i
  • 通过运行命令
    chmod 777 db.sqlite3
    (危险选项)
    允许所有用户进行读写访问
  • 除非您在本地计算机上运行Web服务器,或者数据库中的数据对您来说根本不重要,否则不要选择第三个选项


    此外,如果您使用的是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