Capistrano:使用参数调用任务(内部)

时间:2013-04-26 07:31:36

标签: ruby capistrano

我有这段代码

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

1 个答案:

答案 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