2

I have just setup my server and uploaded all my files for amy Django project. I am currently debugging all the errors it is giving me and I came across this one, which I have never seen before and can't seem to find very much on:

OperationalError at /accounts/login/ attempt to write a readonly database

I understand what it means, I just have no idea how to fix it nor do I know why it is happening. I am using a Digital Ocean droplet as my server. I had just gotten the homepage (login page) to work and upon logging in I came across this.

Here is the traceback:

Traceback Switch to copy-and-paste view

/usr/local/lib/python2.7/dist-packages/django/core/handlers/exception.py in inner
            response = get_response(request) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in _legacy_get_response
            response = self._get_response(request) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in _get_response
                response = self.process_exception_by_middleware(e, request) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in _get_response
                response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py in view
            return self.dispatch(request, *args, **kwargs) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py in _wrapper
            return bound_func(*args, **kwargs) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/views/decorators/debug.py in sensitive_post_parameters_wrapper
            return view(request, *args, **kwargs) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py in bound_func
                return func.__get__(self, type(self))(*args2, **kwargs2) ...
▶ Local vars
/home/django/django_project/allauth/account/views.py in dispatch
        return super(LoginView, self).dispatch(request, *args, **kwargs) ...
▶ Local vars
/home/django/django_project/allauth/account/views.py in dispatch
                                            **kwargs) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py in dispatch
        return handler(request, *args, **kwargs) ...
▶ Local vars
/home/django/django_project/allauth/account/views.py in post
            response = self.form_valid(form) ...
▶ Local vars
/home/django/django_project/allauth/account/views.py in form_valid
            return form.login(self.request, redirect_url=success_url) ...
▶ Local vars
/home/django/django_project/allauth/account/forms.py in login
                            redirect_url=redirect_url) ...
▶ Local vars
/home/django/django_project/allauth/account/utils.py in perform_login
        adapter.login(request, user) ...
▶ Local vars
/home/django/django_project/allauth/account/adapter.py in login
        django_login(request, user) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/contrib/auth/__init__.py in login
        request.session.cycle_key() ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/contrib/sessions/backends/base.py in cycle_key
        self.create() ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/contrib/sessions/backends/db.py in create
                self.save(must_create=True) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/contrib/sessions/backends/db.py in save
                obj.save(force_insert=must_create, force_update=not must_create, using=using) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/models/base.py in save
                       force_update=force_update, update_fields=update_fields) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/models/base.py in save_base
            updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/models/base.py in _save_table
            result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/models/base.py in _do_insert
                               using=using, raw=raw) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py in manager_method
                return getattr(self.get_queryset(), name)(*args, **kwargs) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/models/query.py in _insert
        return query.get_compiler(using=using).execute_sql(return_id) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py in execute_sql
                cursor.execute(sql, params) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py in execute
            return super(CursorDebugWrapper, self).execute(sql, params) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py in execute
                return self.cursor.execute(sql, params) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/utils.py in __exit__
                six.reraise(dj_exc_type, dj_exc_value, traceback) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py in execute
                return self.cursor.execute(sql, params) ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py in execute
        return Database.Cursor.execute(self, query, params) ...
▶ Local vars
Garrett
  • 1,576
  • 4
  • 27
  • 51

1 Answers1

1

Give write permission to database file

sudo chmod a+w db.sqlite3
Astik Anand
  • 12,757
  • 9
  • 41
  • 51
  • How do I do that? – Garrett Sep 26 '17 at 14:46
  • Connect to your server, I think you have hosted on digitalocean, so do first connect to server by `ssh root@your_ip or domain`. And then, `cd /home/django/django_project/` and then `ls` will show **db.sqlite3**. Now just change permission by `sudo chmod a+w db.sqlite3`. – Astik Anand Sep 26 '17 at 15:04
  • DO I have to have a sudo account on my server first before I can do that? – Garrett Sep 26 '17 at 15:43
  • no you don't need to. using root you can do `chmod a+w db.sqlite3`. – Astik Anand Sep 26 '17 at 15:44
  • I just tried that command. I still have errors but it fixed that issue and the errors are now ones that I am more familiar with. How do I changed my database from SQLite to PostgreSQL? – Garrett Sep 26 '17 at 15:52
  • When you connect to `digitalocean` droplet using `ssh root@yourdomain.com` you get the message like . "You can use the following Postgres database credentials: DB: django User: django" – Astik Anand Sep 26 '17 at 15:55
  • There is credentials for connecting to `postgres` you just use that in your **settings.py** – Astik Anand Sep 26 '17 at 15:58
  • Got it, I figured out how to get it to work on my dev machine. I destroyed the droplet since I didn’t really know what I was doing I figured it was better to just get a fresh start – Garrett Sep 26 '17 at 18:06