2013-04-26 29 views
5

tôi có mã nàyCapistrano: gọi nhiệm vụ với các đối số (nội bộ)

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

Tôi muốn sử dụng này để thay đổi mật khẩu cho nhiều người dùng. Làm thế nào tôi có thể thực hiện nhiệm vụ này với các đối số nhưng không phải từ dòng lệnh. Việc thực hiện tiếp theo sẽ là tuyệt vời.

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

Rất tiếc, tính năng này không hoạt động. Một cách để thực hiện công việc này là thiết lập các biến toàn cầu mỗi lần trước khi thực hiện nhiệm vụ, nhưng nó không phải là một giải pháp thanh lịch.

Bạn có thể cho tôi biết cách tốt hơn để triển khai tính năng này không?

PS Tôi không biết ruby, tôi chỉ sử dụng capistrano để triển khai

Trả lời

1

Công việc không có đối số tùy ý. Tuy nhiên bạn có thể bao gồm bất kỳ mã ruby ​​nào trong Capfile của bạn. Vì vậy, bạn có thể định nghĩa một phương pháp mà các cuộc gọi chạy:

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

Bạn cũng có thể sử dụng một iterator:

task :change_passwords do 
    [ 
    ['user1', 'oldpass', 'newpass'], 
    ['user2', 'oldpass', 'newpass'], 
    ['user3', 'oldpass', 'newpass'] 
    ].each do |ary| 
    mysql_change_password(*ary) 
    end 
end 
Các vấn đề liên quan