2013-09-28 92 views
3

我在settings.py中有敏感數據(數據庫密碼),我建議將我的Django項目上傳到github存儲庫,然後將它推送到Heroku的「Django入門」上Heroku的」。如果我把settings.py放在.gitignore中,那麼它可能不會被我的項目部署。我如何防止暴露settings.py,但仍然可以將它部署到我的項目中?隱藏Heroku Django部署的settings.py密碼

+0

您可以使用不同的分支,請參閱http://stackoverflow.com/questions/10475273/git-have-different-gitignore-file-for-each-remote。 – bennofs

+0

謝謝,我想到了,但聽起來很乏味。我想我想出了最好的辦法,就是使用Heroku的環境變量,如https://devcenter.heroku.com/articles/s3,然後使用os.config [「variableName」]來檢索settings.py。相當驚訝,這不是一個更可谷歌的問題,雖然...也許這將有助於 –

+0

你不需要推到github,只是爲了混帳。它甚至可以是沒有任何遠程的本地git存儲庫。在「入門」中,他們只是建議安裝系統級的github .gitignore。 – esauro

回答

2

可以使用環境變量(與heroku config:add SECRET=my-secret)設置的敏感數據和檢索它們在你的設置:

SECRET = os.environ.get('SECRET', 'my-default-secret-key') 

如果你不希望能夠啓動您的應用程序,而不必設置一些數據,使用此語法來代替:

SECRET = os.environ['SECRET'] 

這將引發異常,如果您沒有設置SECRET環境變量。

+0

謝謝,這清楚地證實了我的懷疑:) –

+0

但是,我無法在任何地方找到os.env的語法,我相信它是:os.environ [「HOME」] –

+0

我的錯誤。固定。 – sebastibe

2

您應該使用專門用於分解敏感數據的工具。我使用YamJam https://pypi.python.org/pypi/yamjam/。它允許os.environ方法的所有優點,但更簡單 - 您仍然必須設置這些環境變量,您需要將它們放置在某個腳本/ rc文件中。 YamJam消除了這些問題,並將這些配置設置存儲在項目外的配置存儲中。這使您可以對開發,分期和生產有不同的設置。

from YamJam import yamjam 

    secret = yamjam()['myproject']['secret'] 

是基本用法。和os.environ方法一樣,它不是特定於框架的,你可以在Django或任何其他應用程序/框架中使用它。我已經嘗試過所有這些,多個settings.py文件,if/then和環境爭論的脆弱邏輯。最後,我轉向yamjam,並沒有後悔。

+0

這種方法比創建環境變量要容易得多,並且讓事情更有條理,謝謝你的回答! –