gpt4 book ai didi

python - Django 登录错误 : "attempt to write a readonly database"

转载 作者:行者123 更新时间:2023-12-04 19:32:41 35 4
gpt4 key购买 nike

我正在尝试在 CentOS 6 上设置 Apache(2.4,从源代码构建)+Django(1.8.12),但是当我尝试登录我的站点或创建用户或其他写入数据库的东西时,我收到一个错误:

attempt to write a readonly database



我已经尝试过:
  • 将 db 文件的所有者更改为 Apache 用户(无效)
  • 更改权限:775、774、664 给出与上述相同的错误; 666, 776 给:

  • unable to open database file


  • 使用 django 项目对整个文件夹执行相同的操作

  • 我关注了 this教程。

    我的 httpd.conf (我添加的部分):
    LoadModule wsgi_module modules/mod_wsgi.so
    WSGIScriptAlias / /var/www/project/project/wsgi.py
    WSGIPythonPath /var/www/project:/var/www/env/lib/python3.5/site-packages

    <Directory /var/www/project>
    <Files wsgi.py>
    Require all granted
    </Files>
    </Directory>
    ./manage createsuperuser工作正常,用户添加到数据库。

    对于服务媒体,我使用 Nginx(所有媒体和静态文件检索正确)。

    更新

    完整追溯:
    Environment:


    Request Method: POST
    Request URL: http://localhost:8080/accounts/login/

    Django Version: 1.8.12
    Python Version: 3.5.1
    Installed Applications:
    ('bootstrap3',
    'django_admin_bootstrapped',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'macros',
    'django_ajax',
    'ckeditor',
    'accounts',
    'main',
    'tutor',
    'public_testing',
    'control_testing',
    'debug_toolbar',
    'django_extensions',
    'mmc')
    Installed Middleware:
    ('django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware')


    Traceback:
    File "/var/www/env/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
    132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
    File "/var/www/env/lib/python3.5/site-packages/django/views/decorators/debug.py" in sensitive_post_parameters_wrapper
    76. return view(request, *args, **kwargs)
    File "/var/www/env/lib/python3.5/site-packages/django/utils/decorators.py" in _wrapped_view
    110. response = view_func(request, *args, **kwargs)
    File "/var/www/env/lib/python3.5/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
    57. response = view_func(request, *args, **kwargs)
    File "/var/www/env/lib/python3.5/site-packages/django/contrib/auth/views.py" in login
    51. auth_login(request, form.get_user())
    File "/var/www/env/lib/python3.5/site-packages/django/contrib/auth/__init__.py" in login
    110. request.session.cycle_key()
    File "/var/www/env/lib/python3.5/site-packages/django/contrib/sessions/backends/base.py" in cycle_key
    285. self.create()
    File "/var/www/env/lib/python3.5/site-packages/django/contrib/sessions/backends/db.py" in create
    41. self.save(must_create=True)
    File "/var/www/env/lib/python3.5/site-packages/django/contrib/sessions/backends/db.py" in save
    65. obj.save(force_insert=must_create, using=using)
    File "/var/www/env/lib/python3.5/site-packages/django/db/models/base.py" in save
    734. force_update=force_update, update_fields=update_fields)
    File "/var/www/env/lib/python3.5/site-packages/django/db/models/base.py" in save_base
    762. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
    File "/var/www/env/lib/python3.5/site-packages/django/db/models/base.py" in _save_table
    846. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
    File "/var/www/env/lib/python3.5/site-packages/django/db/models/base.py" in _do_insert
    885. using=using, raw=raw)
    File "/var/www/env/lib/python3.5/site-packages/django/db/models/manager.py" in manager_method
    127. return getattr(self.get_queryset(), name)(*args, **kwargs)
    File "/var/www/env/lib/python3.5/site-packages/django/db/models/query.py" in _insert
    920. return query.get_compiler(using=using).execute_sql(return_id)
    File "/var/www/env/lib/python3.5/site-packages/django/db/models/sql/compiler.py" in execute_sql
    974. cursor.execute(sql, params)
    File "/var/www/env/lib/python3.5/site-packages/debug_toolbar/panels/sql/tracking.py" in execute
    159. return self._record(self.cursor.execute, sql, params)
    File "/var/www/env/lib/python3.5/site-packages/debug_toolbar/panels/sql/tracking.py" in _record
    101. return method(sql, params)
    File "/var/www/env/lib/python3.5/site-packages/django/db/backends/utils.py" in execute
    79. return super(CursorDebugWrapper, self).execute(sql, params)
    File "/var/www/env/lib/python3.5/site-packages/django/db/backends/utils.py" in execute
    64. return self.cursor.execute(sql, params)
    File "/var/www/env/lib/python3.5/site-packages/django/db/utils.py" in __exit__
    98. six.reraise(dj_exc_type, dj_exc_value, traceback)
    File "/var/www/env/lib/python3.5/site-packages/django/utils/six.py" in reraise
    685. raise value.with_traceback(tb)
    File "/var/www/env/lib/python3.5/site-packages/django/db/backends/utils.py" in execute
    64. return self.cursor.execute(sql, params)
    File "/var/www/env/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py" in execute
    318. return Database.Cursor.execute(self, query, params)

    Exception Type: OperationalError at /accounts/login/
    Exception Value: attempt to write a readonly database

    更新 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 部分:
    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': ''}}

    最佳答案

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

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

  • 授予 db.sqlite3 的所有权使用 chown 将文件及其父目录(因此也可以写入)给用户(例如:chown username db.sqlite3)
  • 以 root 用户身份运行网络服务器(通常是 gunicorn)(在运行 sudo -i 之前运行命令 gunicornapache 或 django runserver)
  • 通过运行命令 chmod 777 db.sqlite3 允许对所有用户进行读写访问(危险选项)

  • 永远不要选择第三个选项,除非您在本地机器上运行网络服务器,或者数据库中的数据对您来说根本不重要。

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

    关于python - Django 登录错误 : "attempt to write a readonly database",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797051/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com