How uWSGI parses config files¶
Until uWSGI 1.1 the parsing order has not been ‘stable’ or ‘reliable’.
Starting from uWSGI 1.1 (thanks to its new options subsystem) we have a general rule: top-bottom and expand asap.
Top-bottom means options are internally ordered as they are parsed, while “expand asap” means to inject the options of a requested config file, interrupting the currently parsed one:
Note that the inherit
option behaves differently from the other include options: It is expanded after variable expansion, so any environment variables, external files and placeholders are not expanded. Magic variables (e.g. %n
) are expanded normally.
file1.ini (the one requested from the command line)
[uwsgi]
socket = :3031
ini = file2.ini
socket = :3032
chdir = /var/www
file2.ini
[uwsgi]
master = true
memory-report = true
processes = 4
internally will be assembled in:
[uwsgi]
socket = :3031
ini = file2.ini
master = true
memory-report = true
processes = 4
socket = :3032
chdir = /var/www
A more complex example:
file1.ini (the one requested from the command line)
[uwsgi]
socket = :3031
ini = file2.ini
socket = :3032
chdir = /var/www
file2.ini
[uwsgi]
master = true
xml = file3.xml
memory-report = true
processes = 4
file3.xml
<uwsgi>
<plugins>router_uwsgi</plugins>
<route>^/foo uwsgi:127.0.0.1:4040,0,0</route>
</uwsgi>
will result in:
[uwsgi]
socket = :3031
ini = file2.ini
master = true
xml = file3.xml
plugins = router_uwsgi
route = ^/foo uwsgi:127.0.0.1:4040,0,0
memory-report = true
processes = 4
socket = :3032
chdir = /var/www
Expanding variables/placeholders¶
After the internal config tree is assembled, variables and placeholder substitution will be applied.
The first step is substituting all of the $(VALUE) occurrences with the value of the environment variable VALUE.
[uwsgi]
foobar = $(PATH)
foobar value will be the content of shell’s PATH variable
The second step will expand text files embraced in @(FILENAME)
[uwsgi]
nodename = @(/etc/hostname)
nodename value will be the content of /etc/hostname
The last step is placeholder substitution. A placeholder is a reference to another option:
[uwsgi]
socket = :3031
foobar = %(socket)
the content of foobar will be mapped to the content of socket.
A note on magic variables¶
Config files, support another form of variables, called ‘magic’ variables. As they refer to the config file itself, they will be parsed asap:
[uwsgi]
my_config_file = %p
The content of my_config_file will be set to %p value (the current file’s absolute path) as soon as it is parsed. That means %p (or whatever magic vars you need) will be always be consistent in the currently parsing config file.