2014-03-01 90 views
0

我想知道如何爲不同的環境選擇不同的settings.py文件。我到目前爲止想到的是更改manage.py文件並添加一個配置值,如stage這將對應於設置文件名。如下圖所示:Heroku Django選擇settings.py

本地主機

heroku config:add STAGE="project.settings.prod" 

生產

heroku config:add STAGE="project.settings.prod" 

因此,而不是基礎manage.py

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.production") 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

我們將有:

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", os.environ['stage']) 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

這雖然感覺unnature,並尋找更多的信息,如果有更好的方式來處理這種情況。設置文件夾的示例如下所示:

settings/ 
    __init__.py 
    base.py 
    local.py 
    staging.py 
    test.py 
    prod.py 

還是有辦法添加在Procfile的--settings選項?目前我Procfile是:

web: gunicorn project.wsgi 

回答

0

而不是定義一個stage環境變量,你應該直接定義DJANGO_SETTINGS_MODULE環境變量,並使用原manage.py無需進行修改。

+0

我在哪裏定義DJANGO_SETTINGS_MODULE環境變量?你可以包含這個例子的代碼嗎? –

+0

在您定義'stage'變量的完全相同的地方。 – lanzz

+0

但不正常的manage.py覆蓋這一行:'os.environ.setdefault(「DJANGO_SETTINGS_MODULE」,「project.settings」)'? –