Search code examples
ruby-on-railsgitrakecapistrano

Capistrano 3 pulling command line arguments


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?


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.