Issue
I have been developing a basic app. Now at the deployment stage it has become clear I have need for both a local settings and production settings.
It would be great to know the following:
- How best to deal with development and production settings.
- How to keep apps such as django-debug-toolbar only in a development environment.
- Any other tips and best practices for development and deployment settings.
Solution
The DJANGO_SETTINGS_MODULE
environment variable controls which settings file Django will load.
You therefore create separate configuration files for your respective environments (note that they can of course both import *
from a separate, "shared settings" file), and use DJANGO_SETTINGS_MODULE
to control which one to use.
Here's how:
As noted in the Django documentation:
The value of DJANGO_SETTINGS_MODULE should be in Python path syntax, e.g. mysite.settings. Note that the settings module should be on the Python import search path.
So, let's assume you created myapp/production_settings.py
and myapp/test_settings.py
in your source repository.
In that case, you'd respectively set DJANGO_SETTINGS_MODULE=myapp.production_settings
to use the former and DJANGO_SETTINGS_MODULE=myapp.test_settings
to use the latter.
From here on out, the problem boils down to setting the DJANGO_SETTINGS_MODULE
environment variable.
Setting DJANGO_SETTINGS_MODULE
using a script or a shell
You can then use a bootstrap script or a process manager to load the correct settings (by setting the environment), or just run it from your shell before starting Django: export DJANGO_SETTINGS_MODULE=myapp.production_settings
.
Note that you can run this export at any time from a shell — it does not need to live in your .bashrc
or anything.
Setting DJANGO_SETTINGS_MODULE
using a Process Manager
If you're not fond of writing a bootstrap script that sets the environment (and there are very good reasons to feel that way!), I would recommend using a process manager:
- Supervisor lets you pass environment variables to managed processes using a program's
environment
configuration key. - Honcho (a pure-Python equivalent of Ruby's Foreman) lets you define environment variables in an "environment" (
.env
) file.
Finally, note that you can take advantage of the PYTHONPATH
variable to store the settings in a completely different location (e.g. on a production server, storing them in /etc/
). This allows for separating configuration from application files. You may or may not want that, it depends on how your app is structured.
Answered By - Thomas Orozco
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.