uwsgi and uid

03 November 2014   4 comments   Python, Linux, Django

Powered by Fusion×

So recently, I moved home for this blog. It used to be on AWS EC2 and is now on Digital Ocean. I wanted to start from scratch so I started on a blank new Ubuntu 14.04 and later rsync'ed over all the data bit by bit (no pun intended).

When I moved this site I copied the /etc/uwsgi/apps-enabled/peterbecom.ini file and started it with /etc/init.d/uwsgi start peterbecom. The settings were the same as before:

# this is /etc/uwsgi/apps-enabled/peterbecom.ini
virtualenv = /var/lib/django/django-peterbecom/venv
pythonpath = /var/lib/django/django-peterbecom
user = django
master = true
processes = 3
env = DJANGO_SETTINGS_MODULE=peterbecom.settings
module = django_wsgi2:application

But I kept getting this error:

Traceback (most recent call last):
  File "/var/lib/django/django-peterbecom/venv/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 182, in _cursor
    self.connection = Database.connect(**conn_params)
  File "/var/lib/django/django-peterbecom/venv/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: FATAL:  Peer authentication failed for user "django"

What the heck! I thought. I was able to connect perfectly fine with the same config on the old server and here on the new server I was able to do this:

django@peterbecom:~/django-peterbecom$ source venv/bin/activate
(venv)django@peterbecom:~/django-peterbecom$ ./manage.py shell
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from peterbecom.apps.plog.models import *
>>> BlogItem.objects.all().count()

Clearly I've set the right password in the settings/local.py file. In fact, I haven't changed anything and I pg_dump'ed the data over from the old server as is.

I edit edited the file psycopg2/__init__.py and added a print "DSN=", dsn and those details were indeed correct.
I'm running the uwsgi app as user django and I'm connecting to Postgres as user django.

Anyway, what I needed to do to make it work was the following change:

# this is /etc/uwsgi/apps-enabled/peterbecom.ini
virtualenv = /var/lib/django/django-peterbecom/venv
pythonpath = /var/lib/django/django-peterbecom
user = django
uid = django   # THIS IS ADDED
master = true
processes = 3
env = DJANGO_SETTINGS_MODULE=peterbecom.settings
module = django_wsgi2:application

The difference here is the added uid = django.

I guess by moving across (I'm currently on uwsgi I get a newer version of uwsgi or something that simply can't just take the user directive but needs the uid directive too. That or something else complicated to do with the users and permissions that I don't understand.

Hopefully, by having blogged about this other people might find it and get themselves a little productivity boost.

Follow @peterbe on Twitter


Joost Molenaar
There is no user option, only uid and gid. Maybe there was in an older version of uWSGI?
Peter Bengtsson
Thank you! Paul Egan (comment below) strengthen your comment.
Paul Egan
I don't think uwsgi ever had a `user` option and it's been `uid` since the beginning: https://github.com/unbit/uwsgi/commit/3b93696.
In general uwsgi is very good for maintaining backwards compatibility.
Peter Bengtsson
Wow! that explains so much. Thank you. I'm glad I blogged about it.
Thank you for posting a comment

Your email will never ever be published

Related posts

Shout-out to eventlog 30 October 2014
Bye bye AWS EC2, Hello Digital Ocean 03 November 2014
Related by Keyword:
Is Nginx obsolete now that we have Amazon CloudFront? 28 July 2012
Secs sell! How frickin' fast this site is! (server side) 05 April 2012
How I profile my Nginx + proxy pass server 16 February 2011
Local Django development with Nginx 11 October 2010
fcgi vs. gunicorn vs. uWSGI 09 April 2010
Related by Text:
Strange socket related error with supervisord 05 April 2011
Nasty human error in Zope ZEO setup 14 September 2007
"No space left on device" on OSX Docker 03 October 2017
Never put external Javascript in the <head> 02 April 2013
All my apps are now running on one EC2 server 03 November 2013