Questions tagged «configuration-management»

配置管理(CM)是一个系统工程过程,用于建立并保持产品性能,功能和物理属性与其要求,设计和操作信息在整个生命周期中的一致性。

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


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

9
版本控制和个人配置文件
我们的项目使用特定于用户的配置文件。该文件当前不在版本控制中,因为每个用户都不同。问题是,每当开发人员添加需要配置的新模块或更改现有模块的名称时,其他开发人员都会因未更新其私有配置文件而出错。 为了解决该问题,我们考虑使用两个配置文件:一个默认/全局配置文件,该文件将在版本控制中,并由添加新模块的每个开发人员定期更新;一个私有配置文件将被排除在外版本控制,将仅包含用户特定的更改。 但是,这似乎仍然是临时解决方案。 您可以提出更好的解决方案吗? 专业人士做什么?

5
不良做法-将案例切换到设置环境
在我担任开发人员的最近三年中,我看到了许多示例,这些示例中的人们使用switch语句设置URL的路径(后端和前端)。下面是一个示例: 后端示例(C#): public static string getHost(EnvironmentEnum environment){ var path = String.Empty; switch (environment) { case EnvironmentEnum.dev: path = "http://localhost:55793/"; break; case EnvironmentEnum.uat: path = "http://dev.yourpath.com/"; break; case EnvironmentEnum.production: path = "http://yourpath.com/"; break; } return path; } 前端示例(JavaScript): (function () { if (window.location.host.indexOf("localhost") !== -1) { window.serviceUrl = "http://localhost:57939/"; } else …

10
您如何通过代码更改来更新实时网站?
我知道这是一个非常基本的问题。如果有人能使我幽默并告诉我他们将如何处理,我将不胜感激。 我决定发布此内容,因为我将要安装SynchToy来解决以下问题,并且使用“ Toy”感到有点不专业,但是我想不出更好的方法。 当我处于这种情况下,我发现很多时候,我都缺少一些痛苦而明显的做事方法-这是因为它是公司中唯一的开发人员。 在计算机上工作时开发的ASP.NET Web应用程序 解决方案有2个项目: 网站(文件) WebsiteLib(C#/ dll) 使用Git存储库 部署在GoGrid 2008R2 Web服务器上 部署: 进行代码更改。 推送到Git。 远程桌面到服务器。 从Git中拉出。 通过使用Windows资源管理器拖放来覆盖实时文件。 在第5步中,我从网站根目录中删除所有文件。这不是一件好事。这就是为什么我要安装SynchToy ... 更新:感谢所有有用的回复。我无法选择哪个人来标记答案-在使用Web部署之间-看来我有几个有用的建议: Web Project =将整个站点打包到一个DLL中-对我来说,我无法进行简单的更新-作为50个公司的开发人员,这有时会更简单。 从SCM直接拉到站点的Web根-我最初并不是这样做,因为我担心我的SCM隐藏目录可能最终被暴露出来,但是这里的答案帮助我克服了这一点(尽管我仍然不喜欢拥有一个还有更多的事情需要担心忘记以确保随着时间的推移仍然是正确的) 使用Web场并系统地部署到节点-这是零停机的理想解决方案,这实际上是我关心的问题,因为该站点实质上是我公司的实时收入来源-我可能很难说服他们服务器成本却翻了一番。 ->最后,重申基本原则,即需要对站点进行一次单击部署,否则可能会出错,这是我从答案中得到的最有用的东西。 更新2:我以为我会回到此位置,并使用已经存在了几个月并且可以正常使用的实际解决方案进行更新(对于我的单个Web服务器解决方案)。 我使用的过程是: 进行代码更改 推到Git 远程桌面到服务器 从Git拉 运行以下批处理脚本: cd C:\ Users \ Administrator %systemroot%\ system32 \ inetsrv \ appcmd.exe停止站点“ /site.name:默认网站” robocopy文档\代码\ da …


2
如何通过依赖项注入管理配置?
我是DI / IOC的忠实粉丝。它非常适合处理/抽象出硬依赖关系,并使生活更轻松。 但是,我对此有些疑惑,我不确定该如何解决。 DI / IOC的基本思想是,当实例化对象时,其所有依赖项都将在构造函数中预先填充。 但是恕我直言,构造函数有几种类型的参数(尤其是当您的对象是不可变的时)。 依赖关系(您的对象正常工作所需的对象) 配置(有关工作所需环境的信息) 参数(完成工作的数据) 我发现IOC可以很好地处理依赖关系。但我仍在尝试找出与其他两个人打交道的最佳方法。但是,由于构造函数是要由IOC容器运行的,因此似乎需要将这些项目放入IOC容器中。 我想知道人们采用什么策略/模式,人们发现了哪些优点和缺点。 注意 我知道这是一个高度主观的问题,并且根据SE指南已尝试将其设为“好”主观问题。

2
带有大型公司通讯,配置管理和测试要求的Mercurial存储库结构
我还是另一个Subversion用户,他在分布式版本控制的Tao中苦苦地对其自身进行重新教育。 使用Subversion时,我非常喜欢次项目方法,并且与大多数以前的雇主一样,我们将构建存储库分支;标签和主干如下: branches-+ +-personal-+ | +-alice-+ | | +-shinyNewFeature | | +-AUTOMATED-+ | | +-shinyNewFeature | +-bob-+ | +-AUTOMATED-+ | +-bespokeCustomerProject +-project-+ +-shinyNewFeature +-fixStinkyBug tags-+ +-m20110401_releaseCandidate_0_1 +-m20110505_release_0_1 +-m20110602_milestone trunk 在实际的源代码树本身中,我们将使用(类似)以下结构: (src)-+ +-developmentAutomation-+ | +-testAutomation | +-deploymentAutomation | +-docGeneration | +-staticAnalysis | +-systemTest | +-performanceMeasurement | +-configurationManagement | +-utilities +-libraries-+ | …

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

2
大项目布局:在多个子项目上添加新功能
我想知道如何使用版本控制管理系统来管理具有许多组件的大型项目。 在我当前的项目中,有四个主要部分。 网页 服务器 管理控制台 平台。 Web和服务器部分使用了我编写的2个库。总共有5个git存储库和1个mercurial存储库。项目构建脚本位于平台存储库中。它使整个构建过程自动化。 问题是当我添加一个会影响多个组件的新功能时,我必须为每个受影响的存储库创建分支。实施功能。合并回去。我的直觉是“出事了”。 那么我应该创建一个单一的仓库,并将所有组件放置在那里吗?我认为在这种情况下分支会更容易。或者我只是做我现在正在做的事情。在那种情况下,我该如何解决在每个存储库上创建分支的问题?

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 …

1
谁是配置管理器?
如您所见,我想向社区成员询问有关Configuration Manager的角色。我不是问什么是配置管理,只要它曾经被问过就可以。我需要知道的是: 您认为Configuration Manager应该在您的团队中执行哪些任务? Configuration Manager的主要职责是什么? Configuration Manager的次要/辅助职责是什么? Configuration Manager是否需要负责项目/公司的开发流程,还是应该告诉他该怎么做? Configuration Manager,Build Manager,Release Manager,Deployment Engineer,CI Engineer角色之间有什么关系?它们不是都一样吗-配置管理? 也许术语配置管理是多余的,而技术/团队负责人应该代替所有相关工作? 如果您可以分享自己的看法和经验,那将是非常不错的。


1
为什么称为软件配置管理(SCM)?
当我想到软件配置时,我想到的是运行时读取的文件-该文件将包含服务器可能使用的端口,是否使用加密以及各种资源的路径之类的内容。 当我第一次遇到“软件配置管理”时,我以为它只意味着配置文件的管理,但是我很快意识到SCM工具不仅涉及配置文件,还涉及软件代码,软件可执行文件/二进制文件以及资源。 那么,为什么要使用术语“软件配置管理”?“软件管理”会更广泛吗?还是我对被认为是“配置”的东西缺乏了解?
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.