不确定这个答案在假设的 .net 环境中是否对您有所帮助,但在 *nix/PHP 环境中,这就是我处理相同情况的方式。
好的,所以我做了愚蠢的事情并发布了生产代码
有时,某些应用程序的行为取决于环境,正如您所逃避的那样。为了提供这种在开发和生产环境之间进行检查的能力,我在全局 /etc/profile/profile.d/custom.sh 配置(CentOS)中添加了以下行:
SERVICE_ENV=dev
在代码中,我有一个包装器方法,它将根据名称获取环境变量并本地化它的值,使其可供我的应用程序代码访问。下面是一个片段,展示了如何检查当前环境并做出相应的反应(在 PHP 中):
public function __call($method, $params)
{
// Reduce chatter on production envs
// Only display debug messages if override told us to
if (($method === 'debug') &&
(CoreLib_Api_Environment_Package::getValue(CoreLib_Api_Environment::VAR_LABEL_SERVICE) === CoreLib_Api_Environment::PROD) &&
(!in_array(CoreLib_Api_Log::DEBUG_ON_PROD_OVERRIDE, $params))) {
return;
}
}
请记住,您不希望在应用程序逻辑中添加环境检查,只保留一些极端用例,如代码片段所示。相反,您应该使用 DNS 控制对生产数据库的访问。例如,在您的开发环境中,以下数据库主机名将mydatabase-db
解析为本地服务器,而不是您的实际生产服务器。当您将代码推送到生产环境时,您的 DNS 将正确解析主机名,因此您的代码应该“正常工作”而无需任何环境检查。