更新。仅关于将参数传递给 Capistrano 3 任务。
我知道这个问题已经很老了,但在搜索将参数传递给 Capistrano 任务时仍然首先在 Google 上弹出。不幸的是,Jamie Sutherland 提供的奇妙答案不再适用于 Capistrano 3。在您浪费时间尝试之前,除了结果如下所示:
cap test:parameter -s branch=master
输出:
cap aborted!
OptionParser::AmbiguousOption: ambiguous option: -s
OptionParser::InvalidOption: invalid option: s
和
cap test:parameter -S branch=master
输出:
invalid option: -S
您可以通过单击此黄金链接找到 @senz 和 Brad Dwyer 提供的 Capistrano 3 的有效答案:Capistrano 3 pull
command line arguments
为了完整起见,请参阅下面的代码以了解您拥有的两个选项。
第一个选项:
您可以像使用常规哈希一样使用键和值迭代任务:
desc "This task accepts optional parameters"
task :task_with_params, :first_param, :second_param do |task_name, parameter|
run_locally do
puts "Task name: #{task_name}"
puts "First parameter: #{parameter[:first_param]}"
puts "Second parameter: #{parameter[:second_param]}"
end
end
确保调用 cap 时参数之间没有空格:
cap production task_with_params[one,two]
第二个选项:
在调用任何任务时,您可以分配环境变量,然后从代码中调用它们:
set :first_param, ENV['first_env'] || 'first default'
set :second_param, ENV['second_env'] || 'second default'
desc "This task accepts optional parameters"
task :task_with_env_params do
run_locally do
puts "First parameter: #{fetch(:first_param)}"
puts "Second parameter: #{fetch(:second_param)}"
end
end
要分配环境变量,请像下面这样调用 cap:
cap production task_with_env_params first_env=one second_env=two
希望这会为您节省一些时间。