Reading List is based on top of the cliquet project, and as such, please refer to cliquet’s documentation for more details.
By default, Reading List persists the records and internal cache in a PostgreSQL database.
The default configuration will connect to the
postgres database on
localhost:5432, with user/password
postgres. See more details
below about installation and setup of PostgreSQL.
Reading List uses Docker Compose, which takes care of running and connecting PostgreSQL:
Install and setup PostgreSQL¶
(requires PostgreSQL 9.3 or higher).
docker run -e POSTGRES_PASSWORD=postgres -p 5434:5432 postgres
On debian / ubuntu based systems:
apt-get install postgresql postgresql-contrib
By default, the
postgres user has no password and can hence only connect
if ran by the
postgres system user. The following command will assign it:
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
On Debian / Ubuntu based systems:
apt-get install libffi-dev libssl-dev
apt-get install libffi-devel openssl-devel
Running in production¶
Most default setting values in the application code base are suitable for production.
But the set of settings mentionned below might deserve some review or adjustments:
cliquet.http_scheme = https cliquet.paginate_by = 100 cliquet.batch_max_requests = 25 cliquet.delete_collection_enabled = false cliquet.basic_auth_enabled = false cliquet.storage_pool_maxconn = 50 cliquet.cache_pool_maxconn = 50 fxa-oauth.cache_ttl_seconds = 3600
|note:||For an exhaustive list of available settings and their default values, refer to cliquet source code.|
# Heka cliquet.logging_renderer = cliquet.logs.MozillaHekaRenderer # StatsD cliquet.statsd_url = udp://carbon.server:8125
Application output should go to
stdout, and message format should have no
[handler_console] class = StreamHandler args = (sys.stdout,) level = INFO formater = heka [formatter_heka] format = %(message)s
Adapt the logging configuration in order to plug Sentry:
[loggers] keys = root, sentry [handlers] keys = console, sentry [formatters] keys = generic [logger_root] level = INFO handlers = console, sentry [logger_sentry] level = WARN handlers = console qualname = sentry.errors propagate = 0 [handler_console] class = StreamHandler args = (sys.stdout,) level = INFO formater = heka [formatter_heka] format = %(message)s [handler_sentry] class = raven.handlers.logging.SentryHandler args = ('http://public:email@example.com/1',) level = WARNING formatter = generic [formatter_generic] format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s datefmt = %H:%M:%S
In production, it is wise to run the application with a dedicated database and user.
postgres=# CREATE USER produser; postgres=# CREATE DATABASE proddb OWNER produser; CREATE DATABASE
The tables needs to be created with the cliquet tool.
$ cliquet --ini config/readinglist.ini migrate
|note:||Alternatively the SQL initialization files can be found in the
cliquet source code (
Running with uWsgi¶
To run the application using uWsgi, an app.wsgi file is provided. This command can be used to run it:
uwsgi --ini config/readinglist.ini
uWsgi configuration can be tweaked in the ini file in the dedicated [uwsgi] section.
Here’s an example:
[uwsgi] wsgi-file = app.wsgi enable-threads = true http-socket = 127.0.0.1:8000 processes = 3 master = true module = readinglist harakiri = 30 uid = readinglist gid = readinglist virtualenv = . lazy = true lazy-apps = true
To use a different ini file, the
READINGLIST_INI environment variable
should be present with a path to it.
Running with gevent¶
It is possible to use gevent, by adding this in the configuration:
readinglist.gevent_enabled = true
Gevent and psycogreen should be installed in the virtualenv for it to work properly:
.venv/bin/pip install gevent psycogreen
|note:||Gevent support is known to have issues with Python 3, and as such, it is discouraged to use it in this environment.|