2012-07-12 2 views
2

나는 before_symlink가 언제 어떻게 실행되는지, 특히 실패가있는 경우를 이해하려고 노력하고있다. 이 블록을 선택하십시오 :요리사의 deploy_revision/before_symlink는 언제 실행됩니까?

deploy_revision "foo" do 
    action :deploy 
    deploy_to "/opt/foo" 
    ... 
    symlink_before_migrate(app_symlinks.merge({ 
    ...  })) 
    purge_before_symlink([]) 
    create_dirs_before_symlink([]) 
    symlinks({}) 
    before_symlink do 
    current_release = release_path 

    bash "foo_buildout_install" do 
     user "foo" 
     cwd current_release 
     code <<-EOH 
     ... 
     EOH 
    end 
    end 
    restart_command do 
    current_release = release_path 
    bash "foo_foreman_install_and_restart" do 
     restart foo || start foo 
     EOH 
    end 
    end 
end 

before_symlink 블록이 실행되는 조건은 무엇입니까? 예 : 빌드가 실패하면 요리사가 다시 제공됩니다. 다시 실행됩니까? 심볼릭 링크가 만들어지면 다시 호출됩니까?

(나는 아직도 요리사를 배우고, 나는 루비 개발을하지 않는다, 그래서 deploy_revision 작동, 또는 레일 배포 모델 방법에 대해 아무것도 이해 가정하지 마십시오.)

답변

1

을 나는 그것이 것으로 판단 당신이 요리사를 통해 제공 할 때마다 내가 믿는 '배포'할 때마다 실행됩니다.

당신이 자신을 위해 더 연구 할 경우, 요리사는 루비에 설치 찾을 경로를 보석과 배포 방법은 거의 자신을 설명 ./lib/chef/provider/deploy.rb

에 대한 내부보고 :

def deploy 
    enforce_ownership 
    verify_directories_exist 
    update_cached_repo 
    copy_cached_repo 
    install_gems 
    enforce_ownership 
    callback(:before_migrate, @new_resource.before_migrate) 
    migrate 
    callback(:before_symlink, @new_resource.before_symlink) 
    symlink 
    callback(:before_restart, @new_resource.before_restart) 
    restart 
    callback(:after_restart, @new_resource.after_restart) 
    cleanup! 
    Chef::Log.info "#{@new_resource} deployed to #{@new_resource.deploy_to}" 
    end 
+0

글쎄, 그건 간단합니다 읽으려면 :) 리포지토리 코드가 이미 배포 된 것과 동일한 경우 재배포를 피하기 위해 어딘가에 수표가 없습니까? –

+0

이 보이지 않는다면, copy_cached_repo 메소드는'cached-copy' 디렉토리에있는 디렉토리를 릴리스 디렉토리로 복사 한 다음 위의 심볼릭 링크 작업에 복사합니다. 아마도 캐시 된 복사본의 존재는 처음부터 repo를 다시 체크 아웃하지 않는다는 것을 암시합니다. – Anentropic

관련 문제