2015-02-03 4 views
2

django 앱을 fabfile이있는 여러 호스트로 마이그레이션하고 싶습니다. 문제는 모든 호스트가 (다른 서버의) 동일한 데이터베이스에 연결하고 각 호스트에 대해 migrate 명령이 실행된다는 것입니다.django app을 여러 서버로 마이그레이션

하나의 호스트를 마스터로 선택하고 마스터에서만 마이그레이션 명령을 실행할 수 있지만 더 우아하고 적절한 해결책이 있는지 궁금 할 것입니다.

fabfile.py

def migrate(): 
    virtualenv('python manage.py makemigrations') 
    virtualenv('python manage.py migrate') 

def prod(): 
    env.user = 'myuser' 
    env.hosts = ['X1', 'X2'] 

답변

1

당신은에 대한 세 가지 옵션이 있습니다.

@runs_once 데코레이터를 사용할 수 있습니다. 문서 번호 here. 같은 호출

@runs_once 
def migrate(): 
    virtualenv('python manage.py makemigrations') 
    virtualenv('python manage.py migrate') 

def prod(): 
    env.user = 'myuser' 
    env.hosts = ['X1', 'X2']`` 

: 당신은 그냥 같은 것을 할 거라고 어디

$ fab -R myRole migrate update 

을 당신은 또한 방금 말한에서 사용하는 특정 역할을 적용 할 수 here 주심 작업 :

from fabric.api import run, roles 

env.roledefs = { 
    'db': ['db1'], 
    'web': ['web1', 'web2', 'web3'], 
} 

@roles('db') 
def migrate(): 
    # Database stuff here. 
    pass 

@roles('web') 
def update(): 
    # Code updates here. 
    pass 

전화 번호 :

$ fab migrate update 

그리고 좀 더 세밀하게 처리하려면 동일한 기능을 execute() 함수 (해당 섹션의 문서에 나와 있음)와 결합하여 다른 작업을 호출하는 deploy 함수를 만들 수 있습니다. 이 같은 상대 :

$ fab deploy 
+0

@run_once은 훌륭한 anwser입니다 : 같은

def deploy(): execute(migrate) execute(update) 

가 호출됩니다. 감사 – brsbilgic

관련 문제