2012-04-03 30 views
6

Snippet từ deploy.rbLàm thế nào để thiết lập các biến có điều kiện trong deploy.rb capistrano của

task :prod1 do 
    set :deploy_to, "/home/project/src/prod1" 
end 

task :prod2 do 
    set :deploy_to, "/home/project/src/prod2" 
end 

tôi có 2 nhiệm vụ như trên. Bây giờ thay vì chạy thủ công hoặc "cap prod1 deploy" hoặc "cap prod2 deploy", tôi muốn tạo một tác vụ "prod" để đặt "deploy_to" bắt buộc dựa trên sự tồn tại của một tệp trên máy chủ.

cái gì đó như:

task :prod do 
    if (A_FILE_IN_SERVER_EXISTS) 
    set :deploy_to, "/home/project/src/prod2" 
    else 
    set :deploy_to, "/home/project/src/prod1" 
end 

Làm thế nào để làm điều đó?

Trả lời

10

Bạn có thể làm điều đó như thế này:

task :set_deploy_to_location do 
    if capture("[ -f /etc/passwd2 ] && echo '1' || echo '0'").strip == '1' 
    set :deploy_to, "/home/project/src/prod2" 
    else 
    set :deploy_to, "/home/project/src/prod1" 
    end 
    logger.info "set deploy_to = #{deploy_to}"  
end 

này sẽ làm những gì bạn cần. Bạn có thể móc phương pháp này bằng cách sử dụng trước và sau móc như sau:

before :deploy, :set_deploy_to_location 
+0

Cảm ơn! –

Các vấn đề liên quan