uwsgi.ini configuration for python apps

I found the answer myself after digging through the uwsgi docs a little.

Reference, https://uwsgi-docs.readthedocs.io/en/latest/ConfigLogic.html, we can specify configuration logic and dynamically compute paths by making use of environment variables while in a python virtualenv.

So assuming that I am currently in my myproject virtualenv, my .ini configuration will automatically compute my paths for chdir and virtualenv .ini configuration options like this:

[uwsgi]

if-env = PROJECT_HOME
print = Your path is %(_)/myproject
chdir = %(_)/myproject
endif =

if-env = VIRTUAL_ENV
print = Your virtualenv is %(_)
virtualenv = %(_)
endif = 

socket=127.0.0.1:3034
module=django.core.handlers.wsgi:WSGIHandler()
env= DJANGO_SETTINGS_MODULE=bbox.settings
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log

The print statement is optional of course, but this gives the uwsgi binary the values for chdir and virtualenv that it is expecting.

Something like this:

calvin$ uwsgi --ini myproject/uwsgi.ini 
[uWSGI] getting INI configuration from myproject/uwsgi.ini
Your path is /Users/calvin/work/myproject
Your virtualenv is /Users/calvin/.virtualenvs/myproject
*** Starting uWSGI 1.2.4 (64bit) on [Thu Jul 26 17:00:04 2012] ***
compiled with version: 4.2.1 Compatible Apple Clang 3.1 (tags/Apple/clang-318.0.61) on 25 July 2012 20:06:56
detected number of CPU cores: 8

The print statements are unnecessary in your final .ini file of course. I am just placing them there so as to print out the necessary info which confirms that my paths are dynamically computed in the .ini file.

Tags:

Uwsgi