2009-07-21 4 views
3

많은 카프리 스트라 노 예제 조리법에는 :db 역할이 포함되어 있습니다. 기본적으로 배포 작업은 모든 역할의 모든 호스트에 앱 코드를 내 보냅니다. 그래서 이것은 사람들이 DB 호스트에 자신의 앱 사본을 보관하는 것이 일반적이라고 제안합니다. 또한, 카피 스트라 노의 분산 deploy.rb 레시피, :deploy:migrate은 다음과 같습니다왜 DB 호스트에 앱의 사본을 보관 하시겠습니까?

task :migrate, :roles => :db, :only => { :primary => true } do 
    # ... 
end 

내 질문은, 왜 그런 식으로 이루어집니다입니까? DB 호스트 (Ruby가 설치되지 않았을 수도 있음)에서 앱 코드를 유지하고 프로덕션 박스에서 마이 그 레이션을 실행하는 것이 더 깔끔하지 않습니까?

답변

7

db 서버는 데이터베이스를 '담당'하는 서버이기 때문에 마이그레이션을 실행합니다.

또한 데이터베이스 서버 자체에서 테이블을 작성/삭제/변경하는 보안 정책만을 상상할 수도 있습니다.

마이그레이션하는 동안 데이터가로드되는 경우 약간의 성능 향상이있을 수 있지만 처음에는 끔찍한 생각입니다.

당신은 당신의 데이터베이스 호스트를 참조 할 필요가 있고 같은 것을 사용할 수 있습니다 거기에 코드의 사본이 필요하지 않은 경우 : 응용 프로그램 서버에서 마이그레이션을 실행

role :db, 'dbhost', :no_release => true 

샘플 코드 :

role :app, 'apphost', :runs_migrations => true 
task :migrate, :roles = :app, :only => {:runs_migrations => true } do 
    #... 
end 
+0

니스, 나는 no_release 옵션에 대해 몰랐습니다. –

관련 문제