[英]Use distribute/setuptools to create symlink (or run script)?
[英]Create a symlink with setuptools
Django从未想出如何处理配置的标准方法。 Django默认将它放入项目目录中的settings.py
中,这是不太可行的,因为你不想覆盖/usr/lib/python3/{site,dist}-packages/someproject/
来配置你的项目。 此外,文件将在包升级后消失。
我想以一种至少与sdist,bdist wheel和bdist deb在linux上工作的方式打包一个django项目,并在/usr/lib/python3/{site,dist}-packages/someproject/settings.py
包含/创建一个符号链接/usr/lib/python3/{site,dist}-packages/someproject/settings.py
到/etc/someproject/settings.py
。 这似乎是一个不可能的壮举。
另一种方法是在/etc/
执行设置,感觉有点脏。
考虑通过将您的Django配置放在环境变量中来避免这个问题,在settings.py
使用合理的默认值。 我们的团队在阅读了The Twelve-Factor App之后转而采用这种技术。
在不更改任何代码的情况下,可以在部署之间轻松更改Env变量; 与配置文件不同,它们几乎没有机会被意外地检入代码仓库; 与自定义配置文件或其他配置机制(如Java系统属性)不同,它们是与语言和操作系统无关的标准。
以下是我们的settings.py
中的一些示例,它们以合理的默认值开头,然后读取环境变量以检查覆盖。
EMAIL_HOST = os.environ.get("MYAPP_EMAIL_HOST", "localhost")
# This is a list of lists in JSON, for example:
# export MYAPP_ADMINS='[["Your Name", "your_email@example.com"]]'
ADMINS = json.loads(os.environ.get("MYAPP_ADMINS", "[]"))
选择默认值时,请考虑让新开发人员轻松设置项目,以及默认情况下使项目安全。
您可以看到EMAIL_HOST
示例是一个简单的字符串,而ADMINS
示例从JSON字符串加载更多结构。 更复杂的设置,例如LOGGING
,从环境变量加载可能很不方便。 从环境变量(例如日志记录级别)加载小部分设置,或使用环境变量将路径传递给JSON,YAML或INI文件。 就个人而言,我更喜欢YAML而不是JSON,因为你可以包含评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.