以下是我提出的方法:
我已经在我的一些项目中使用了(2),并且只使用了一台开发机器,但是现在我们已经达到了10台左右,管理不断变化的列表可能会变得很困难。 / p>
(1)我不喜欢,因为这是一个重要文件, 应该受版本控制。
(3)我从未尝试过。我们在设置每台服务器时需要更多配置,但它可能是一个很好的解决方案。
还有其他我错过的吗?有什么利弊?
答案 0 :(得分:1)
(3)不需要在服务器上进行更多配置。您可以默认使用服务器模式,并且需要在开发计算机上进行更多配置。
一般情况下,我总是希望将dev机器作为特殊情况,并将释放行为作为默认值。唯一棘手的部分是,如果相关设置在配置文件中,那么开发人员将不小心检查其修改后的文件版本。您可以在版本控制系统(例如签入挂钩)或:
中避免这种情况我个人更喜欢拥有配置覆盖文件,因为你已经有了加载一个配置文件的代码,添加另一个配置文件应该非常简单。阅读环境并不是很困难,当然,它只是一个单独的机制。
有些人真的喜欢他们的程序受环境控制(特别是那些想要在从脚本运行时控制它们的程序。他们不希望在设置时很容易编写配置文件来自脚本的环境)。因此,使用该POV的环境可能是值得的,但不仅仅是这个设置。
另一个完全不同的选项:如果您使用合适的管理员权限登录应用程序,则可以在应用程序中配置开发/发布模式。这是否是一个好主意可能取决于你是否有那样的编写调试日志消息的开发人员,“我不能解决这个问题,但没有客户会说出差异,他们是太傻了。“如果是这样,(a)不允许应用管理员启用调试模式(b)重新教育你的开发者。
答案 1 :(得分:0)
以下是其他一些可能性。
有些组织将开发计算机放在一个网络上,将生产计算机放在另一个网络上,例如dev.example.com
和prod.example.com
。如果您的组织使用该实践,则应用程序可以通过运行它的完全限定主机名来确定其环境,或者可以通过检查其IP地址中的某些位来确定其环境。
另一种可能性是使用可嵌入脚本语言(Tcl,Lua和Python)作为配置文件的语法。这样做意味着您的配置文件可以轻松查询环境变量(或IP地址)并使用它来驱动if-then-else
语句。这种方法的缺点是有人编辑配置文件以添加恶意代码(例如,删除文件)的潜在安全风险。
最后一种可能性是通过shell / Python / Perl脚本启动每个应用程序。该脚本可以查询其环境,然后使用它来驱动if-then-else
语句,以将命令行选项传递给“真实”应用程序。
顺便说一下,我不喜欢编写环境测试if-then-else
语句,如下所示:
if (check-for-running-in-production) {
... // run program in production mode
} else {
... // run program in development mode
}
如果check-for-running-in-production
测试尚未更新以处理新添加的生产计算机,则上述逻辑会无声地中断。相反,如果更喜欢编码更具防御性:
if (check-for-running-in-production) {
... // run program in production mode
} else if (check-for-running-in-development) {
... // run program in development mode
} else {
print "Error: unknown environment"
exit
}