2013-04-26 8 views
5

Mam ten kodCapistrano: zadzwoń zadanie z argumentów (wewnętrznie)

namespace :mysql do 
    task :change_password do 
    run "mysqladmin -u #{user} -p#{old} password #{new}" 
    end 
end 

chcę użyć tego, aby zmienić hasło dla wielu użytkowników. Jak mogę wykonać to zadanie z argumentami, ale nie z wiersza polecenia. Następne wdrożenie byłoby fantastyczne.

task :change_passwords do 
    mysql.change_password('user1', 'oldpass', 'newpass'); 
    mysql.change_password('user2', 'oldpass', 'newpass'); 
    mysql.change_password('user3', 'oldpass', 'newpass'); 
end 

Niestety to nie działa. Jednym ze sposobów wykonania tej pracy jest ustawienie zmiennych globalnych za każdym razem przed wykonaniem zadania, ale nie jest to eleganckie rozwiązanie.

Czy możesz mi powiedzieć lepszy sposób realizacji tego?

PS Nie wiem, rubin, jestem tylko przy użyciu Capistrano dla wdrażania

Odpowiedz

1

Zadania nie przyjmować dowolne argumenty. Jednak możesz dołączyć dowolny kod ruby ​​do pliku Capfile. Tak więc można określić metodę, która wywołuje run:

def mysql_change_password(user, old, new) 
    run "mysqladmin -u #{user} -p#{old} password #{new}" 
end 

Można również użyć iterator:

task :change_passwords do 
    [ 
    ['user1', 'oldpass', 'newpass'], 
    ['user2', 'oldpass', 'newpass'], 
    ['user3', 'oldpass', 'newpass'] 
    ].each do |ary| 
    mysql_change_password(*ary) 
    end 
end