【问题标题】:Capistrano: call task with arguments (internally)Capistrano:使用参数调用任务(内部)
【发布时间】:2013-04-26 07:31:36
【问题描述】:

我有这个代码

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

【问题讨论】:

    标签: ruby capistrano


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2014-04-25
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多