Capistrano 3 pulling command line arguments

capistrano, git, rake, ruby-on-rails

Solution

Rake tasks (which cap is using) are supporting arguments.

namespace :test do
  desc "Test task"
  task :test, :arg1 do |t, args|
    arg1 = args[:arg1]
    puts arg1
  end
end

cap -T outputs:

cap yiic:test[arg1] # Test task

Example of invocation:

cap production yiic:test[test1]

Also, here is a helpful post

P.S.: you should use env vars for "global" settings. Like common values for multiple tasks.

Problem

I'm in the process of upgrading from Capistrano 2 to Capistrano 3. In Cap 2 I was using the following to take a command line argument as the branch name (otherwise default to `master`) ``` set :branch, fetch(:branch, "master") ``` If I called `cap deploy` it would deploy the master branch. But it also let me do something like this: ``` cap deploy -S branch=foo ``` Which would deploy the `foo` branch. Now, in Capistrano 3, if I try to run the above I get an error: `invalid option: -S`. What's the proper way to pass an argument via the command line now?

Original source