|
|
1
123
在
您可以覆盖
|
|
|
2
268
Two Scoops of Django: Best Practices for Django 1.5 建议对设置文件使用版本控制并将文件存储在单独的目录中:
这个
在基本文件中
在本地开发设置文件中
在文件生产设置文件中
然后当你运行django时,你添加
这本书的作者也提出 a sample project layout template 在吉瑟布上。 |
|
|
3
63
而不是
同样地,
最后,
我喜欢这个解决方案的原因是:
|
|
|
4
20
我使用了哈珀·谢尔比发布的稍微修改过的“if-debug”设置样式。显然,根据环境(win/linux/etc),代码可能需要稍作调整。 我以前使用过“if-debug”,但我发现有时候我需要使用deubg设置为false进行测试。我真正想要区分的是环境是生产还是开发,这给了我选择调试级别的自由。
我还是会考虑用这种方式来设置正在进行的工作。我还没有看到任何一种方法来处理涵盖所有基础的Django设置,同时设置也不是一件麻烦的事情(我不喜欢5x设置文件方法)。 |
|
|
5
14
我使用设置“local.py”和设置“production.py”。在尝试了几个选项之后,我发现,当简单地拥有两个设置文件时,很容易在复杂的解决方案中浪费时间。 在Django项目中使用mod_python/mod_wsgi时,需要将其指向设置文件。如果你把它指向本地服务器上的app/settings_local.py和生产服务器上的app/settings_production.py,那么生活就变得简单了。只需编辑适当的设置文件并重新启动服务器(Django Development Server将自动重新启动)。 |
|
6
7
我通过以下方式管理配置: django-split-settings . 它是默认设置的替代品。它很简单,但也是可配置的。不需要重构现有设置。
下面是一个小例子(文件
就这样。 更新
我写了一篇
blog post
关于管理
|
|
|
7
6
大多数这些解决方案的问题是,要么应用本地设置 之前 普通的,或 之后 他们。 所以不可能超越
同时。 一个解决方案可以使用带有configParser类的“ini”样式的配置文件来实现。它支持多个文件、延迟字符串插值、默认值和许多其他优点。 一旦加载了多个文件,就可以加载更多的文件,如果有的话,这些文件的值将覆盖以前的文件。 根据机器地址、环境变量甚至之前加载的配置文件中的值,可以加载一个或多个配置文件。然后您只需使用解析的值来填充设置。 我成功使用的一个策略是:
作为一个可以用这个实现的示例,您可以为每个env定义一个“子域”值,然后在默认设置中使用该值(如
这是我可以得到的干燥,大多数(现有)文件只有3或4个设置。除此之外,我还必须管理客户配置,因此存在一组额外的配置文件(包括数据库名称、用户和密码、分配的子域等),每个客户一个或多个。 您可以根据需要将其调低或调高,只需在配置文件中输入要为每个环境配置的键,一旦需要新的配置,就将以前的值调到默认配置中,并在必要时覆盖它。 该系统已被证明是可靠的,并与版本控制工作良好。它已经用于管理两个独立的应用程序集群(每台机器15个或更多独立的django站点实例),拥有50多个客户,其中集群的大小和成员根据系统管理员的心情而变化…… |
|
|
8
5
窍门是修改
想到这些相互缠绕的文件,我就头疼。
组合、导入(有时有条件)、重写、修补已设置的内容以防
这些年来,我经历了所有不同的解决方案。他们都
有点
工作,但管理起来很痛苦。
世界跆拳道联盟!我们真的需要这么多麻烦吗?我们从一个开始
我希望我终于找到了下面的解决方案。 让我们回顾一下目标(一些共同的,一些我的)
不要
解决方案
我的策略包括优秀
django-environ
用于
这里的诀窍是修改
要查看完整的示例,请执行回购: https://github.com/wooyek/django-settings-strategy
设置/
本地开发的默认值。一个秘密文件,主要用于设置所需的环境变量。
如果本地开发中不需要这些值,请将其设置为空值。
我们在这里提供默认值,而不是在
设置/local.py
这里发生的事情是从
设置/生产.py
对于生产,我们不应该期望有一个环境文件,但是如果我们在测试一些东西,就更容易有一个。
但不管怎么说,test提供了很少的内联默认值,所以
这里的主要兴趣点是
这些将是我们的生产默认值,不需要将它们放在环境或文件中,但如果需要,可以覆盖它们。整洁! 设置/base.py这些都是您最普通的django设置,有一些条件和很多从环境中读取它们。 几乎所有的东西都在这里,保持所有目标环境的一致性和尽可能相似。 主要区别如下(我希望这些是不言而喻的):
最后一位显示了这里的功率。
实际上,我们有一个复杂的重要性层次:
|
|
|
9
4
记住,settings.py是一个实时代码文件。假设在生产环境中没有调试集(这是一种最佳实践),可以执行以下操作:
非常基本,但是理论上,您可以根据调试的值或者您想要使用的任何其他变量或代码检查达到任何复杂程度。 |
|
|
10
4
我也在与Laravel合作,我喜欢那里的实现。我试图模仿它,并将其与T.Stone提出的解决方案结合起来(见上图):
也许像这样的东西能帮到你。 |
|
|
11
3
我对这个问题的解决方案也有点混合了一些已经在这里说明的解决方案:
然后,我将所有依赖于环境的设置都基于该设置:
我更喜欢使用两个单独的settings.py文件,因为我可以将设置保持在单个文件中,而不是将它们分散在多个文件中。像这样,当我更新一个设置时,我不会忘记为两个环境都这样做。
当然,每种方法都有其缺点,这一点也不例外。这里的问题是我不能覆盖
|
|
12
3
对于我的大多数项目,我使用以下模式:
(要使用自定义设置文件运行manage.py,只需使用--settings命令选项:
|
|
|
13
3
我使用了JPartogi上面提到的一个变体,我发现它有点短:
基本上,在每台计算机(开发或生产)上,我都有相应的主机名_settings.py文件,可以动态加载。 |
|
|
14
3
还有Django Classy设置。我个人很喜欢它。它是由Django IRC上最活跃的人建造的。您将使用环境变量来设置内容。 |
|
15
2
为了使用不同的
使用这种方法的好处 :
|
|
|
16
1
我在manage.py中对其进行了区分,并创建了两个单独的设置文件:local_settings.py和prod_settings.py。 在manage.py中,我检查服务器是本地服务器还是生产服务器。如果是本地服务器,它将加载local_settings.py;如果是生产服务器,它将加载prod_settings.py。基本上是这样的:
我发现将设置文件分为两个单独的文件要容易一些,而不是在设置文件中进行大量的IFS。 |
|
|
17
1
作为维护不同文件的替代方法,如果您愿意: 如果您使用Git或任何其他VCS将代码从本地推送到服务器,您可以做的是将设置文件添加到.gitignore。 这将允许您在两个地方都有不同的内容,没有任何问题。因此,在服务器上,您可以配置一个独立版本的settings.py,在本地进行的任何更改都不会反映在服务器上,反之亦然。 此外,它还将从Github中删除settings.py文件,这是一个很大的错误,我已经看到许多新手在做这个。 |
|
|
18
1
我的设置拆分如下
我们有3个环境
很明显,分段生产应该有尽可能多的相似环境。所以我们保持
但有一个案例,我必须确定运行的服务器是生产服务器。@斯通的回答帮助我写了如下支票。
|
|
|
19
1
1-在应用程序中创建一个新文件夹并为其命名设置。 2-现在创建新的 初始化 .py文件在其中并在其中写入
3-在设置文件夹中创建三个新文件:local.py和production.py以及base.py。 4-在base.py中,复制先前settings.p文件夹中的所有内容,并用不同的名称重命名,比如说old_settings.py。 5-在base.py中,更改基本路径以指向新的设置路径 旧路径->base_dir=os.path.dirname(os.path.dirname(os.path.abspath)( 文件 )) 新路径->base_dir=os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath)( 文件 )) 现在,通过这种方式,项目目录可以结构化,并且可以在生产和本地开发之间进行管理。 |
|
|
20
0
制作多个版本的settings.py是 12 Factor App methodology . 使用 python-decouple 或 django-environ 相反。 |
|
|
21
0
我认为最好的解决方案是由@t.stone提出的,但我不知道为什么不在django中使用debug标志。我为我的网站编写以下代码:
简单的解决方案总是比复杂的解决方案好。 |
|
|
22
-3
我发现这里的回答很有帮助。(这是否得到了更明确的解决?最后一个回答是一年前。)在考虑了所有列出的方法之后,我提出了一个解决方案,但在这里我没有看到。 我的标准是:
我认为打开主机是有道理的,但后来发现真正的问题是不同的设置 环境 然后有了一个“啊哈”的时刻。我把这个密码放在 结束 我的settings.py文件:
这样,应用程序 默认值 到生产设置,这意味着您显式地“白名单”您的开发环境。忘记在本地设置环境变量要比从另一个角度设置环境变量安全得多,并且忘记在生产环境中设置一些内容,并使用一些开发人员设置。 在本地开发时,无论是从shell还是在.bash_概要文件中还是在任何地方:
(或者,如果您正在Windows上开发,可以通过控制面板或其他所谓的工具来设置…Windows总是让它变得如此模糊,以至于您可以设置环境变量。) 使用这种方法,开发人员设置都在一个(标准)位置,并且只需在需要时覆盖生产设置。任何与开发设置有关的混乱都应该是完全安全的,以承诺在不影响生产的情况下进行源代码控制。 |