Questions tagged «configuration»

配置是根据功能单元的性质,数量和主要特征进行的布置。

7
使用Python文件作为配置文件有多么糟糕的主意?
我一直使用JSON文件配置应用程序。我从编写大量Java时就开始使用它们,现在我主要从事服务器端和数据科学Python开发,并且不确定JSON是否是正确的选择。 我已经看到Celery使用实际的Python文件进行配置。最初我对此持怀疑态度。但是,使用简单的Python数据结构进行配置的想法开始对我产生影响。一些优点: 数据结构将与我通常在其中进行编码的结构相同。因此,我无需改变心态。 我的IDE(PyCharm)了解配置和代码之间的联系。Ctrl+ B使您可以轻松地在配置和代码之间跳转。 我不需要使用IMO不必要的严格JSON。我在看你双引号,没有结尾的逗号,也没有评论。 我可以在正在使用的应用程序中编写测试配置,然后轻松将它们移植到配置文件,而无需进行任何转换和JSON解析。 如果确实需要,可以在配置文件中执行非常简单的脚本。(尽管这应该非常非常有限。) 所以,我的问题是:如果我换了脚,我该如何射击自己的脚? 没有技能的最终用户将不会使用配置文件。对配置文件的任何更改当前都提交给Git,并作为连续部署的一部分部署到我们的服务器中。除非有紧急情况或正在开发中,否则无需进行手动配置更改。 (我考虑过YAML,但有关它的一些问题令我感到不适。因此,目前它不在美国的餐桌上。)

7
配置数据:单行表与名称-值对表
假设您编写了一个可由用户配置的应用程序。为了将该“配置数据”存储到数据库中,通常使用两种模式。 该单行表 CompanyName | StartFullScreen | RefreshSeconds | ... ---------------+-------------------+------------------+-------- ACME Inc. | true | 20 | ... 的名称-值对表 ConfigOption | Value -----------------+------------- CompanyName | ACME Inc. StartFullScreen | true (or 1, or Y, ...) RefreshSeconds | 20 ... | ... 我已经看到了两种选择,它们都有明显的优缺点,例如: 单行表限制了您可以拥有的配置选项的数量(因为通常限制一行中的列数)。每个其他配置选项都需要更改数据库架构。 在名称/值对表中,所有内容都是“字符串类型的”(您必须对Boolean / Date / etc。参数进行编码/解码)。 (还有很多) 开发社区内部对于哪种选择更可取达成共识?

8
单个配置对象是个坏主意吗?
在我的大多数应用程序中,我都有一个单例或静态“ config”对象,负责从磁盘读取各种设置。几乎所有的类都出于各种目的使用它。本质上,这只是名称/值对的哈希表。它是只读的,因此我不必太担心我拥有如此多的全局状态。但是现在我开始进行单元测试,这开始成为一个问题。 一个问题是您通常不希望使用与运行时相同的配置进行测试。有两种解决方案: 为config对象提供一个仅用于测试的设置器,以便您可以传递不同的设置。 继续使用单个配置对象,但是将其从单例更改为一个实例,您可以在需要的任何地方进行传递。然后,您可以使用不同的设置在应用程序中一次构造它,并在测试中一次构造它。 但是无论哪种方式,您仍然面临第二个问题:几乎任何类都可以使用config对象。因此,在测试中,您需要为要测试的类及其所有依赖项设置配置。这会使您的测试代码很难看。 我开始得出这样的配置对象是个坏主意的结论。你怎么看?有哪些替代方案?以及如何开始重构在各处使用配置的应用程序?

3
我应该使用配置文件还是数据库来存储业务规则?
我最近在阅读《实用程序员》,其中指出: 细节弄乱了我们原始的代码,尤其是如果它们经常更改。每次我们必须修改代码以适应业务逻辑,法律或管理层的个人喜好时,都会冒着破坏系统的风险—引入新的错误。 亨特,安德鲁;托马斯·戴维(1999-10-20)。实用程序员:从《旅人》到《大师》(Kindle位置2651-2653)。培生教育(美国)。Kindle版。 我目前正在编程一个具有某些模型的Web应用程序,这些模型的属性只能来自一组值,例如(由于Web应用程序数据是机密的,因此不是实际示例): light-> type =球体/立方体/圆柱体 光源类型只能是上述三个值,但根据TPP,我应始终进行编码,好像它们可以更改并将其值放置在配置文件中一样。由于在整个应用程序中都发生过几次此类事件,因此我的问题是: 我是否应该在以下位置存储类似的值: 配置文件: 'light-types' => array(sphere, cube, cylinder), 'other-type' => value, 'etc' => etc-value 数据库中的一个表,每个配置项一行 一个数据库,其中每个配置项都有一个表(例如table light_types:; columns :id、name) 其他方式? 非常感谢您提供的任何帮助/专业知识。

8
开发机器应该在VM内吗?[关闭]
Rob Conery的这篇文章(请注意)表示开发环境应在虚拟机中运行。我明白他在说什么,并且倾向于同意,但仍然有些不安。既然虚拟化已经非常成熟,甚至生产系统都可以在VM内运行,那么这几乎不是问题,但是正如我所说的那样,这让我很困扰。 您如何虚拟化开发计算机?你已经这样做了吗?如果这样做的话,路上有什么陷阱或陷阱吗?

7
存储应用程序配置的首选方法是什么?
大多数时候,我将开发应用程序配置存储在项目的根目录中,如下所示: app |-- config.json 但这似乎不是最佳方法,因为此配置最终存储在版本控制系统中-可能导致用户名,密码和其他敏感内容泄漏。 12 Factor App指南建议完全删除配置文件,并使用环境变量进行配置设置: ...将配置存储在环境变量中。Env var易于在部署之间进行更改,而无需更改任何代码。与配置文件不同,它们很少有可能被意外检入代码存储库;与自定义配置文件或其他配置机制(例如Java系统属性)不同,它们是与语言和操作系统无关的标准。 这对我来说听起来真的很不错,但是在没有将其检入源代码管理的情况下,该变量存储在哪里呢?我可以使用哪些工具将这些变量传递给应用程序?可能有数十种配置选项,每次启动应用程序时手动键入它们都不是一件好事-因此它们必须存储在某种文件中。这样,该文件将最终在源代码控制中,然后我们返回到开始的地方。 是否有一些公认的处理配置选项的方法,而没有将本地配置存储在源代码管理中的风险?

6
何时使用常量与配置文件来维护配置
我经常和自己争论是否要在我的web.config或Constants.cs类中放置某些键或类似的东西。 例如,如果我想存储应用程序特定的键(无论大小写),我可以将其存储并通过自定义键从Web配置中获取它,或者通过在我的常量类中引用一个常量来使用它。 您何时要在配置键上使用常量? 这个问题确实适用于我认为的任何语言。

5
处理大量结构化配置/属性文件的最佳实践
想象一下一个具有大量服务器的系统。它们每个都有许多设置: 一些特定于服务器的 一些特定于该地区的 他们之间有些共同点 也许您可以进行一些自定义分组,例如这组服务器仅用于读取 等等 我想到的当前实践是具有压倒性能力的简单属性结构。 让我们以Google服务器为例。其中每个都有一个要加载的设置列表。 例如,伦敦服务器可能具有: rootsettings.properties,europesettings.properties,londonsettings.properties,searchengine.properties,等。 每个文件都包含一组属性,并且加载顺序使您可以覆盖属性,您可以走得更远。 举例来说:rootsettings.properties可有accessible=false作为默认,但重写在searchengine.properties与accessible=true 我在使用此结构时遇到的问题是,很容易失控。它根本不是结构化的,这意味着您可以在任何级别定义任何属性,并且许多项目可能会过时。 此外,随着网络的增长,更改中间级别变得不可能了,因为您现在影响了非常多的服务器。 最后但并非最不重要的一点是,每个单独的实例可能需要1个特殊属性,这意味着您的树最终还是为每个服务器配置了一个配置,这使其不是最佳解决方案。 如果您对更好的配置管理体系结构有任何建议/想法,将不胜感激。

3
Shell脚本的用户配置。最佳做法?
我正在编写带有一些应由用户配置的变量的shell脚本。可能会出现一系列问题,将提供一个用于下载和配置脚本的安装程序。该脚本针对其他开发人员。 这可以通过多种方式实现: 在脚本本身中使用占位符,并sed在安装过程中用于替换占位符(如下所示:https : //stackoverflow.com/questions/415677/how-to-replace-placeholders-in-a-text-file) 优点:所有变量定义都包含在脚本中。手动下载脚本并为喜欢编辑器而不是安装程序的用户配置变量很容易。 缺点:一旦安装到位,就很难通过安装程序重新配置变量。除非我创建一个更复杂的正则表达式,否则容易出错。 使用配置文件(基本上是另一个带有分配的shell脚本),并使用source它来包含它。(并且可能将其放置在~/.scriptname?主脚本已复制到中/usr/local/bin) 优点:重新配置脚本很容易。甚至可以从主脚本中添加用于这样做的参数(可能也可以在第一个解决方案中使用,但是从本身编辑脚本听起来不是一个好主意) 缺点:该脚本现在依赖于两个文件,并且要求用户运行安装程序才能创建配置文件。如果不存在,可以通过自动生成配置文件来解决。但是,对于只想下载脚本,进行编辑并完成脚本的用户而言,查找外部配置文件仍然比较麻烦。 另外,关于安装后用户应如何管理配置的一些选项: 像 $ myscript config server.host example.org 这样的Git $ myscript config server.proxypath / home / johndoe / proxy $ myscript config server.httppath / home / johndoe / web Interactive $ myscript config 输入服务器主机名:example.org 输入服务器上代理 的路径:/ home / johndoe / proxy …


3
如何正确处理用于python中的单元测试的全局参数?
我们正在实现许多算法,这些算法通常具有许多共享的,众所周知的和与安全性相关的参数。 当前,我们仅使用一个包含所有参数和两个预定义全局对象的类: class PublicParams(object): p = q = 0 def __init__(self, p, q): self.p = p self.q = q # used for tests publicParams_test = PublicParams(15,7) # Some 2048 bit numbers for example publicParams_secure = PublicParams(128378947298374928374,128378947298374928374) 然后,算法将一个PublicParams对象作为默认为生产性的参数publicParams_secure def AlgoOne(n, publicParams = publicParams_secure): # do stuff with publicParams.p # ... AlgoTwo(x, …


9
我应该将对象传递给构造函数,还是在类中实例化?
考虑以下两个示例: 将对象传递给构造函数 class ExampleA { private $config; public function __construct($config) { $this->config = $config; } } $config = new Config; $exampleA = new ExampleA($config); 实例化课程 class ExampleB { private $config; public function __construct() { $this->config = new Config; } } $exampleA = new ExampleA(); 处理将对象添加为属性的正确方法是哪种?我什么时候应该使用另一个?单元测试会影响我应该使用的内容吗?

5
配置类/结构:图案还是反图案?备择方案?
如果将新的配置选项添加到程序,则在将选项带到需要对其执行操作的位置时,它通常会产生大量涟漪效应。我知道有三种基本的处理方法: 将所有配置设置传递给程序中明确需要它们作为原语的部分。这是最明确的方式,也是最能使事物解耦的方式。缺点是这既冗长又脆弱。 将最常用的配置设置设为全局/静态。这是最简单的方法,但是会引入一定距离的操作,阻碍了可测试性,并假定该配置确实是全局的(您在任何给定时间只需要一个配置)。 创建一个包含整个程序或程序中每个主要问题的所有配置选项的配置类/结构,然后将其显式传递。它不如(1)明确,但比(2)更明确。如果只想更改一个函数调用的设置,则可以克隆config对象并更改该值。这在测试和实践中都是有用的。但是,您仍然可能最终将大量信息传递给它不需要的功能,并且更改config类/结构中的值仍会导致一定距离的操作。 您会考虑(3)模式还是反模式?如果是反模式,您该怎么办?

5
如何确定存储格式之间的区别,以及其中的一些示例用例?
我们有不同的方式来存储程序数据(在游戏,员工数据库,程序配置等中保存文件): 纯文本(.ini和.conf) XML格式 数据库(MySQL,SQLite ...) .zip 包含多个文件(格式不同)的类似文件 二进制文件(.doc例如,由序列化工具创建的文件等) 上面列出的格式有哪些不同的用例,它们的优点与缺点(考虑速度,灵活性,文件大小,易用性...)之间有什么分别?如何在不同任务之间做出决定? 关于压缩格式:仅用于包含其他文件。它也可以是另一种压缩格式。这允许几个文件的结构,包括图像文件,声音文件和文本文件。例如,假设您有一种消息的存储格式,其中可能包含文件。压缩文件中可以包含以下文件: message.txt (containing the message) attachments (folder containing attachments) audio.wav picture.jpg

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.