5

我有这个代码

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进行部署

4

1 回答 1

1

Tasks don't take arbitrary arguments. However you can include any ruby code in your Capfile. So you can define a method that calls run:

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

You can also use an iterator:

task :change_passwords do
  [
   ['user1', 'oldpass', 'newpass'],
   ['user2', 'oldpass', 'newpass'],
   ['user3', 'oldpass', 'newpass']
  ].each do |ary|
    mysql_change_password(*ary)
  end
end
于 2013-05-02T04:35:09.033 回答