Configurações do Django para vários ambientes

Atualização Basta ler Two Scoops of Django


Depois de criar seu projeto, crie um settingsdiretório em seu projeto e copie settings.pypara settings/defaults.py– você não precisa usar o nome defaults.py(algumas pessoas preferem common.py), mas para este exemplo é o que usarei.

Em seguida, crie settings/__init__.pyum arquivo para cada ambiente. Seu projeto deve ser mais parecido com este:

top-folder-named-whatever-you-like
- manage.py
- requirements.txt
- myproject/
- __init__.py
- urls.py
- wsgi.py
- myapp/
- __init__.py
- models.py
- tests.py
- views.py
- static/
- templates/
- templatetags/
- settings/
- __init__.py
- defaults.py
- production.py # from defaults import *
- staging.py # ditto
- development.example.py # ditto
- development.py # not in git

Obviamente, nem todos definem seus projetos da mesma maneira, então pode haver algumas diferenças. Tudo bem, desde que a pasta de configurações tenha um arquivo para cada ambiente.

Diga ao git para ignorar (ou se você chamar assim). Mas crie um arquivo de exemplo para ajudar outros desenvolvedores a se preparar rapidamente.development.pylocal.py

Na parte superior de cada um dos arquivos de configurações de ambiente, adicione uma importação para obter as configurações padrão.

Agora é a parte complicada, pois há muitas maneiras de definir a DJANGO_SETTINGS_MODELvariável de ambiente.

Remotamente, é mais simples. Você pode colocá-lo em seu vhost se estiver no Apache, e tenho certeza de que há uma maneira semelhante com o nginx. Existem outras maneiras de declará-lo no mesmo comando que executa seu wsgi. Seja como for, se estiver, digamos, em produção, você vai querer que seja definido como .myproject.settings.production

Localmente, você deseja definir como . Você costumava ser capaz de inserir seu .bashrc. Mas como o Django mudou o layout padrão, agora você deve incluir o nome do projeto no caminho das configurações.myproject.settings.developmentDJANGO_SETTINGS_MODULE=settings.development

A solução óbvia, mas mais provável de falhar, é lembrar de defini-la na linha de comando em cada sessão de terminal em que estiver trabalhando em seu projeto.

Uma maneira hacky é copiar para (ignorado pelo git) e editá-lo para usar em vez de apenas . Então lembre-se de usar em vez demanage.pymanage_local.pymyproject.settings.developmentmyproject.settingsmanage_local.pymanage.py

Uma maneira profissional, porém detalhada, é usar o Foreman, um Procfile e um arquivo .env que contém as variáveis ​​de ambiente. Se você tiver mais variáveis ​​de ambiente para definir ou se estiver implantando no heroku, também pode fazer desta forma.

Aqui está um bom artigo sobre como usar o Foreman localmente: http://avalonstar.com/journal/2012/jan/01/on-foreman-and-procfiles/

Atualização Estou trabalhando em um fabfile usando a versão de desenvolvimento do Fabric que permitirá que você execute comandos como fab webe fab shelle fab manage:somecommandcom DJANGO_SETTINGS_MODULEconforme definido em um .envarquivo que também pode ser usado com o Foreman.