2012-04-25 2 views
1

방금 ​​테스트 및 배포 환경의 특정 설정을보다 잘 제어하기 위해 Fabric을 사용하기 시작했습니다. 구성을 스왑하는 최선의 방법에 대해 생각해 보려고합니다.패브릭을 사용하여 데이터베이스 연결 조작

의 내가 간단한 데이터베이스 연결 기본적으로 인증에 대한 몇 가지 상수 정의 내 응용 프로그램의 모듈 있다고 가정 해 봅시다 : 나는 직물을 발견하기 전에

host = 'db.host.com' 
user = 'someuser' 
passw = 'somepass' 
db = 'somedb' 

class DB(): 
    def __init__(self,host=host,user=user,passw=passw,db=db,cursor='DictCursor'): 
    #make a database connection here and all that jazz 

, 나는에 socket 라이브러리에서 getfqdn() 기능을 사용을 시스템이 푸시 된 호스트의 도메인 이름을 확인한 다음 인증 자격 증명을 조건부로 지정하십시오.

if getfqdn() == 'test.somedomain.com': 
    host = 'db.host.com' 
    user = 'someuser' 
    passw = 'somepass' 
    db = 'somedb' 
elif getfqdn() == 'test.someotherdomain.com': 
    host = 'db.other.com' 
    user = 'otherguy' 
    passw = 'otherpass' 
    db = 'somedb' 

이것은 분명히 그다지 크지 않습니다. 필자가 알고 싶은 것은 Fabric에서 이와 같은 것을 적용하는 가장 현명한 방법입니다. 따라서 프로젝트가 특정 테스트/배포 서버에 푸시되면이 값은 사후 푸시에서 변경됩니다.

나는 문서를보고 몇 가지 접근법을 생각할 수 있습니다. Fabric이 배포 된 내용을 기반으로 셸 명령을 사용하여 출력 할 수있는 상수를 정의한 파일을 가지고 있어야합니까? 그러면 데이터베이스 처리기를 정의하는 파일에서 파일을 가져올 수 있습니까? 이 fabfile에서 openwrite을 실행하는 것이 합리적입니까? 나는 또한 .gitignore 이러한 종류의 파일을 가지고 있다고 가정했기 때문에 repo에 커밋되지 않고 Fabric에 의존하여 배포했습니다.

현재 모든 구성 설정에 가장 적합한 방법을 적용 할 계획입니다. 현재는 getfqdn을 사용하여 스왑하거나 수동으로 조정하십시오. 감사!

답변

1

env.host에서 모든 것을 수행 한 다음 the contrib template function과 같은 것을 사용하여 conf 파일을 렌더링하고 위로 밀어 올릴 수 있습니다. 하지만 템플릿은 이러한 경우에 가장 좋습니다. (꼭두각시 및 기타 설정 관리자 참조)

+0

감사합니다.이 기능을 사용하기 위해 Fabric 출력을 일부 json으로 설정하고이를 리팩터링하는 것으로 결정했습니다. – DeaconDesperado

관련 문제