Configuration¶
Configuration for an app can come from two sources: configuration file(s), and the Settings table in the database.
Config File Inheritance¶
An important thing to understand regarding Rattail config files, is that one file may “include” another file(s), which in turn may “include” others etc. Invocation of the app will often require only a single config file to be specified, since that file may include others as needed.
For example web.conf
will typically include rattail.conf
but the web
app need only be invoked with web.conf
- config from both files will inform
the app’s behavior.
Typical Config Files¶
A typical Poser (Rattail-based) app will have at the very least, one file named
rattail.conf
- this is considered the most fundamental config file. It
will usually define database connections, logging config, and any other “core”
things which would be required for any invocation of the app, regardless of the
environment (e.g. console vs. web).
Note that even rattail.conf
is free to include other files. This may be
useful for instance, if you have a single site-wide config file which is shared
among all Rattail apps.
There is no strict requirement for having a rattail.conf
file, but these
docs will assume its presence. Here are some other typical files, which the
docs also may reference occasionally:
web.conf - This is the “core” config file for the web app, although it
still includes the rattail.conf
file. In production (running on Apache
etc.) it is specified within the WSGI module which is responsible for
instantiating the web app. When running the development server, it is
specified via command line.
quiet.conf - This is a slight wrapper around rattail.conf
for the sake
of a “quieter” console, when running app commands via console. It may be used
in place of rattail.conf
- i.e. you would specify -c quiet.conf
when
running the command. The only function of this wrapper is to set the level to
INFO for the console logging handler. In practice this hides DEBUG logging
messages which are shown by default when using rattail.conf
as the app
config file.
cron.conf - Another wrapper around rattail.conf
which suppresses
logging even further. The idea is that this config file would be used by cron
jobs; that way the only actual output is warnings and errors, hence cron would
not send email unless something actually went wrong. It may be used in place
of rattail.conf
- i.e. you would specify -c cron.conf
when running the
command. The only function of this wrapper is to set the level to WARNING for
the console logging handler.
ignore-changes.conf - This file is only relevant if your rattail.conf
says to “record changes” when write activity occurs in the database(s). Note
that this file does not include rattail.conf
because it is meant to be
supplemental only. For instance on the command line, you would need to specify
two config files, first rattail.conf
or a suitable alternative, but then
ignore-changes.conf
also. If specified, this file will cause changes to be
ignored, i.e. not recorded when write activity occurs.
without-versioning.conf - This file is only relevant if your
rattail.conf
says to enable “data versioning” when write activity occurs in
the database(s). Note that this file does not include rattail.conf
because it is meant to be supplemental only. For instance on the command line,
you would need to specify two config files, first rattail.conf
or a
suitable alternative, but then without-versioning.conf
also. If specified,
this file will disable the data versioning system entirely. Note that if
versioning is undesirable for a given app run, this is the only way to
effectively disable it; once loaded that feature cannot be disabled.
Settings from Database¶
The other (often more convenient) source of app configuration is the Settings table within the app database. Whether or not this table is a valid source for app configuration, ultimately depends on what the config file(s) has to say about it.
Assuming the config file(s) defines a database connection and declares it a valid source for config values, then the Settings table may contribute to the running app config. The nice thing about this is that these settings are checked in real-time. So whereas changing a config file will require an app restart, any edits to the settings table should take effect immediately.
Usually the settings table will override values found in the config file. This behavior also is configurable to some extent, and in some cases a config value may only come from a config file and never the settings table.
An example may help here. If the config file contained the following value:
[poser]
foo = bar
Then you could create a new Setting in the database with the following fields:
name = poser.foo
value = baz
Assuming typical setup, i.e. where settings table may override config file, the app would consider ‘baz’ to be the config value. So basically the setting name must correspond to a combination of the config file “section” name, then a dot, then the “option” name.