【问题标题】:Hiding settings.py passwords for Heroku Django deployment隐藏 Heroku Django 部署的 settings.py 密码
【发布时间】:2013-10-05 00:04:51
【问题描述】:

我在 settings.py 中有敏感数据(数据库密码),建议我先将我的 Django 项目上传到 github 存储库,然后再将其推送到 Heroku 上的“Heroku 上的 Django 入门”。如果我将 settings.py 放在 .gitignore 中,那么它可能不会与我的项目一起部署。如何防止 settings.py 被暴露但仍将其与我的项目一起部署?

【问题讨论】:

  • 你可以使用不同的分支,见stackoverflow.com/questions/10475273/…
  • 谢谢,我想到了,但听起来很乏味。我想我找到了最好的方法,那就是使用 Heroku 的环境变量,如 devcenter.heroku.com/articles/s3 ,然后使用 os.config["variableName"] 来检索 settings.py 中的值。很惊讶这不是一个更适合谷歌的问题......也许这会有所帮助
  • 你不需要推送到github,只需要推送到git。它甚至可以是一个没有任何远程的本地 git 存储库。在“入门”中,他们只是建议在系统范围内安装 github .gitignore。

标签: python django heroku passwords django-settings


【解决方案1】:

您可以使用环境变量(heroku config:add SECRET=my-secret)来设置敏感数据并在您的设置中检索它们:

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

如果您不想在没有设置一些数据的情况下启动您的应用,请改用以下语法:

SECRET = os.environ['SECRET']

如果您没有设置SECRET 环境变量,它将引发异常。

【讨论】:

  • 但是,我在任何地方都找不到语法 os.env,我相信它是:os.environ["HOME"]
【解决方案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,没有后悔。

【讨论】:

  • 这种方法比创建环境变量要容易得多,并且使事情更有条理,感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多