2012-04-03 2 views
4

오케이, 그래서 나는 바보 같은 일을하고 우리의 개발 데이터베이스 (SQL Server 2008 R2)를 목표로하는 프로덕션 코드 (C#, VS2010)를 발표했습니다. 다행스럽게도 우리는 프로덕션 데이터베이스를 아직 사용하지 않으므로 모든 것을 복구하고 동기화하려고 노력하는 고통을 느끼지 않았습니다. ...프로덕션 데이터베이스에 연결되어 있는지 런타임에서 확인하는 방법은 무엇입니까?

그러나 훨씬 더 고통 스러울 수있을 때이 문제가 다시 발생하지 않도록하고 싶습니다. 내 생각은 시작할 때 쿼리 할 수있는 테이블을 추가하고 반환 된 값으로 연결된 데이터베이스를 확인하는 것입니다. 생산은 "PROD"를 반환하고 dev와 test는 다른 값을 반환합니다.

차이가 있으면 응용 프로그램이 데이터베이스에 액세스하기 위해 WCF 서비스와 대화하므로 실제 연결 문자열이 아닌 구성 파일에 끝점이 있습니다.

의미가 있습니까? 다른 사람들이이 문제를 어떻게 해결 했습니까?

감사합니다, 데이브

+0

당신이 테스트에 자극에서 백업을 복원 할 때를 업데이트하기 위해 기억하는 테이블을 사용하여 하나의 문제 또는 dev 환경과 놀라지 않을 때 생산성을 볼 때 –

+0

@ 마이클 - 아름답게 작동하지만, 대답으로 받아 들일 수없는 유일한 의견입니다 ... – DaveN59

+0

@ DaveN59 그 경우 , 내 의견을 대답으로 변환했습니다 ... –

답변

5

이 생산 계정에 대한 액세스 권한이없는 것입니다 해결하는 가장 쉬운 방법. 그것들은 .net 응용 프로그램을위한 Machine.config 파일에 저장됩니다. 비. NET 응용 프로그램에서 이것은 공통 위치에 구성 파일을 가지고 쉽게 복제되거나 계정 정보를 보유하는 레지스트리 항목을 감히 말합니다.

대부분의 서버는 별칭을 통해 액세스되므로 실제로 아무 환경에서도 연결 문자열을 변경할 필요가 없습니다. 구성에서 사용자를 잡아서 호스트 파일의 서버 별칭을 사용하면 올바른 서버를 가리킬 수 있습니다. 또한 db 인스턴스 (하드웨어 변경 등)를 전환 할 때 모든 구성 파일을 업데이트해야하는 번거 로움을 없애줍니다.

클릭 한번만 배포하면 끝 점이 있습니다. 최종 사용자 데스크톱의 컴퓨터 구성에 새 끝점 URI를 게시 한 다음 (이 코드는 내부 응용 프로그램이라고 가정합니다) 코드에서 참조 할 수 있습니다.

이것은 많은 작업이 될 수 있으므로 절대 수행 할 수없는 경우 (2000 년 콜 센터 직원이있는 마지막 직장이므로이 밀어 넣기가 훨씬 어려웠지만 여전히 가능했습니다). 응용 프로그램을 빌드하는 마지막 단계로 app.config 파일을 수정하는 자동 빌드 서버 설정이 항상있을 수 있습니다. 그런 다음 자동화 된 빌드 서버에서 컴파일 된 코드를 항상 게시합니다. app.config에서 개발자 프로세스의 수동 단계와 같이 변경하지 마십시오. 이것은 어느 시점에서 항상 문제를 일으킬 것입니다.

지금까지 아무 것도 작동하지 않는다면 내가 싫어했던 마지막 옵션 (이 것도 역시 완료했습니다)이 작동했지만 매핑 된 드라이브의 값을 찾아 보는 것입니다. 본질적으로 회사의 모든 사람들은 R :이라고 말하도록 매핑 된 드라이브를 가지고 있습니다. 이 곳에서 프로덕션 구성 파일 등을 볼 수 있습니다. 유인 계정 사용자는 프로덕션 값이있는 하나의 드라이브 위치에 매핑하고 개발자 등은 개발 값을 사용하여 다른 드라이브 위치에 매핑합니다. 나는이 옵션을 다른 것에 비해 싫지만 작동하지만 다른 사람들이 지루하고 어려워지면서 (사무실 정치, 빌드 서버 설정 등으로) 너를 구할 수있다.

+0

여기에 해당하는지 잘 모르겠습니다. 모든 사용자는 동일한 계정 (생산 라인)을 사용하며 클릭 한번만 사용하여 게시합니다. 또한 나중에 WCF 서비스에 대한 편집을 참조하십시오. 우리는 제작 서비스에 영향을 미치고 너무 늦을 때까지 알 수없는 코드를 게시 할 수 있습니다. – DaveN59

+0

+1 별칭의 경우 ... –

+0

사려 깊은 답변에 감사드립니다. 필자의 원래 주저했던 부분은 machine.config에 익숙하지 않기 때문입니다. 여기서 찾을 수있는 것을 파고 들자면, 모든 함수는 System.ServiceModel을 포함하지 않는 configSections 부분에 포함 된 설정에 국한되어있는 것처럼 보입니다. 그래서 나는 학습 원정에 나간다 ... 어쨌든, 당신은 수표를 얻을 수 있도록 가장 완벽한 대답입니다. – DaveN59

2

프로덕션 서버의 이름이 개발 서버의 이름과 다를 경우 간단히 SELECT @@SERVERNANE AS ServerName 수 있습니다.

+0

저는 이것을 구현하려고 합니다만, 조금 생각한 후에 이것이 최종 해결책으로 작동하지 않는다는 것을 깨달았습니다. 그것은 원래 아이디어의 라인을 따라 문제를 해결하지만, 우리가 엉망으로 만들 때 앱이 실패하게하는 것은 좋지 않습니다. 그것이 내 원래 아이디어가하는 것입니다. 응. 어쨌든, 저는 우리가 정말로 엉망이 될 때 우리를 붙잡을 수있는 안전 장치로 당신의 제안을 구현할 생각이지만, 문제의 해결책은 아닙니다. 제안 해 주셔서 감사합니다! – DaveN59

1

이 답변이 .net 환경에서 도움이되는지, * nix/PHP 환경에서 도움이되는지를 잘 모르는 경우에도 동일한 상황을 처리합니다.당신이 회피로

OK

, 그래서 벙어리 일 및 발표 생산 코드를했다

는 일부 응용 프로그램의 동작을 따라 환경에있는 시간이있다. 개발 및 생산 환경 사이를 점검하기 위해이 기능을 제공하기 위해 전 세계 /etc/profile/profile.d/custom.sh의 설정에 다음 라인 (CentOS는)을 추가 :

SERVICE_ENV=dev 

그리고 코드

나는이 래퍼 메서드를 사용하여 이름을 기반으로 환경 변수를 가져오고 내 응용 프로그램 코드에 액세스 할 수 있도록하는 값을 지역화합니다.

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; 
    } 
} 

, 당신은 고추에 환경 검사와 애플리케이션 로직을 원하지 않는 기억 몇 가지 극단적 인 사용 사례 등을 위해 저장 : 다음은 현재의 환경을 확인하고 (PHP에) 따라 반응하는 방법을 보여주는 코드 조각입니다 스 니펫으로 시연했다. 오히려 DNS를 사용하여 프로덕션 데이터베이스에 대한 액세스를 제어해야합니다. 예를 들어 개발 환경에서 다음 db 호스트 이름 mydatabase-db은 실제 프로덕션 서버 대신 로컬 서버로 확인됩니다. 프로덕션 환경으로 코드를 푸시하면 DNS가 호스트 이름을 올바르게 해석하므로 환경 확인없이 코드가 "그냥 작동"해야합니다.

1

MSBuild 및 app.config 조작에 대한 교과서 및 튜토리얼을 몇 시간 흘려 보았을 때, SlowCheetah - XML ​​Transforms http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5이라는 걸 발견 한 적이 있는데, 처음에는 우연히 만난 지 1 시간도 채 걸리지 않았습니다. 추천! 문서에서 :

이 패키지를 사용하면 app.config 또는 다른 XML 파일을 빌드 구성을 기반으로 변환 할 수 있습니다. 또한 XML 변형을 만드는 데 도움이되는 추가 도구를 추가합니다.

이 패키지는 Sayed Ibrahim Hashimi, Chuck England와 Bill Heibert (MSBuild에서 책을 저술 한 Hashimi)가 만든 패키지입니다. app.config, web.config 또는 빌드 구성을 기반으로하는 다른 XML 파일을 변환 할 수있는 간단한 유비 쿼터스 방식을 찾고 있다면 더 이상 보이지 않습니다.이 VS 패키지가 작업을 수행합니다.

그래, 내가 내 자신의 질문에 대답했다는 것을 알았지 만, 결국 나는 진짜 대답을 가리키는 대답에 대한 포인트를 주었다. 지금은 ... 돌아가서 문제의 나의 새로운 이해를 바탕으로 질문을 편집해야

데이브

+0

SlowChece가 당신을 위해 일을 끝내서 다행입니다. –

관련 문제