좋아요, 마침내이 문제를 해결할 시간이있었습니다. 바라건대 다른 누군가가이 대답을 유용하게 사용할 수 있기를 바랍니다. 여기에 내가 결국 문제 해결 방법 : 나는 혼란 방법으로 문제를 언급했다 수 있다는 것을 지금
role :db, "db1" ,{ :credentials => 'db1-credentials'}
role :db, "db2" ,{ :credentials => 'db2-credentials'}
role :db, "db3"
namespace :stackoverflow do
# Don't run this task on host that don't have credentials defined
task :default, {:role => :db, :except => {:credentials => nil } } do
servers = find_servers_for_task(current_task)
servers.each do |server|
credentials = server.options[:credentials]
puts credentials # actual task
end
end
end
내가 볼을 - 그게 내가 이해되지 않았기 때문에, 그 작업을 동시에 실행합니다.
사실이 작업은 각 서버에 대해 한 번씩 (여기서는 puts credentials
) 작업을 실행합니다.
출력 :
$ cap stackoverflow
* executing `stackoverflow'
db1-credentials
db2-credentials
이것은 서버가 자격 증명이없는 경우 실행하지 않도록 작업에 필터를 추가하는 것이 좋습니다.
즉, 팀의 모든 사람들이 모든 서버를 최신 상태로 유지하고 (보안상의 이유로 버전이 지정되지 않은) 모든 서버에 대한 자격 증명이 너무 번거롭다는 것을 알게되었습니다 (따라서 Capistrano 사용에 대한 생각은 무의미 함). 이제는 사용자의 디스크에 외부 구성을 유지하는 대신 영향을받는 서버의 데이터를 보관할 것입니다 (대부분 내부에 숨겨진 모든 자격 증명을 가진 실행 가능한 스크립트의 형태로 진행됩니다).이처럼 : 당신이 실제로 원격 명령에서 서버의 옵션을 사용하려면
task :dump {:role => :db} do
run "/root/dump_db.sh | gzip > /tmp/dump.sql.gz"
download "/tmp/dump.sql.gz", "somewhere"
end
몇 시간 동안 find_servers_for_task (current_task)를하는 방법을 찾고있었습니다. 감사합니다. – aceofspades