我有这段代码
namespace :mysql do
task :change_password do
run "mysqladmin -u #{user} -p#{old} password #{new}"
end
end
我想用它来更改多个用户的密码。如何使用参数执行此任务,但不能从命令行执行此任务。下一个实施将是非常棒的。
task :change_passwords do
mysql.change_password('user1', 'oldpass', 'newpass');
mysql.change_password('user2', 'oldpass', 'newpass');
mysql.change_password('user3', 'oldpass', 'newpass');
end
不幸的是,这不起作用。使这项工作的一种方法是在执行任务之前每次都设置全局变量,但这不是一个优雅的解决方案。
你能告诉我更好的方法吗?
PS我不知道ruby,我只是使用capistrano进行部署
答案 0 :(得分:1)
任务不接受任意参数。但是,您可以在Capfile中包含任何ruby代码。因此,您可以定义一个调用run:
的方法def mysql_change_password(user, old, new)
run "mysqladmin -u #{user} -p#{old} password #{new}"
end
您也可以使用迭代器:
task :change_passwords do
[
['user1', 'oldpass', 'newpass'],
['user2', 'oldpass', 'newpass'],
['user3', 'oldpass', 'newpass']
].each do |ary|
mysql_change_password(*ary)
end
end