#python #django #apache #wsgi #graphite
#python #django #apache #wsgi #graphite
Вопрос:
Ну, я попал в graphite и graphite-web и застрял на ошибке «Значение исключения: попытка записи базы данных только для чтения». Я уже пробовал chmod и chown в самой базе данных, и я все еще получаю эту ошибку.
Файл находится в /opt/graphite/storage/graphite.db, он получил завивку rwx-rwx-rwx (chmod 777), и я попробовал www-data в качестве владельца и вернул ему root, потому что он получил ту же ошибку.
Environment:
Request Method: GET
Request URL: http://IP:8000/composer
Django Version: 1.8.18
Python Version: 2.7.16
Installed Applications:
('graphite.account',
'graphite.browser',
'graphite.composer',
'graphite.dashboard',
'graphite.events',
'graphite.functions',
'graphite.metrics',
'graphite.render',
'graphite.tags',
'graphite.url_shortener',
'graphite.whitelist',
'django.contrib.auth',
'django.contrib.sessions',
'django.contrib.admin',
'django.contrib.contenttypes',
'django.contrib.messages',
'django.contrib.staticfiles',
'tagging')
Installed Middleware:
('graphite.middleware.LogExceptionsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.gzip.GZipMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.auth.middleware.RemoteUserMiddleware')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/graphite/webapp/graphite/composer/views.py" in composer
27. profile = getProfile(request)
File "/opt/graphite/webapp/graphite/user_util.py" in getProfile
35. return default_profile()
File "/opt/graphite/webapp/graphite/user_util.py" in default_profile
51. 'password': '!'})
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" in manager_method
127. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in get_or_create
407. return self._create_object_from_params(lookup, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in _create_object_from_params
439. obj = self.create(**params)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in create
348. obj.save(force_insert=True, using=self.db)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save
734. force_update=force_update, update_fields=update_fields)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save_base
762. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in _save_table
846. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in _do_insert
885. using=using, raw=raw)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" in manager_method
127. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in _insert
920. return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py" in execute_sql
974. cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py" in execute
79. return super(CursorDebugWrapper, self).execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py" in __exit__
98. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py" in execute
318. return Database.Cursor.execute(self, query, params)
Exception Type: OperationalError at /composer
Exception Value: attempt to write a readonly database
Это из error.log:
Ответ №1:
Решил это сам. это была не сама база данных, а папка без разрешения на запись!