Composer support for Capistrano 3.x


Add this line to your application's Gemfile:

gem 'capistrano', '~> 3.1.0'
gem 'capistrano-composer'

And then execute:

$ bundle

Or install it yourself as:

$ gem install capistrano-composer


Require the module in your Capfile:

require 'capistrano/composer'

capistrano/composer comes with 5 tasks:

  • composer:install
  • composer:install_executable
  • composer:dump_autoload
  • composer:self_update
  • composer:run

The composer:install task will run before deploy:updated as part of Capistrano's default deploy, or can be run in isolation with:

$ cap production composer:install

By default it is assumed that you have the composer executable installed and in your $PATH on all target hosts.


Configurable options, shown here with defaults:

set :composer_install_flags, '--no-dev --no-interaction --quiet --optimize-autoloader'
set :composer_roles, :all
set :composer_working_dir, -> { fetch(:release_path) }
set :composer_dump_autoload_flags, '--optimize'
set :composer_download_url, ""
set :composer_version, '1.0.0-alpha8' #(default: not set)

Installing composer as part of a deployment

Add the following to deploy.rb to manage the installation of composer during deployment (composer.phar is install in the shared path).

SSHKit.config.command_map[:composer] = "php #{shared_path.join("composer.phar")}"

namespace :deploy do
  after :starting, 'composer:install_executable'

Accessing composer commands directly

This library also provides a composer:run task which allows access to any composer command.

From the command line you can run

$ cap production composer:run['status','--profile']

Or from within a rake task using capistrano's invoke

task :my_custom_composer_task do
  invoke "composer:run", :update, "--dev --prefer-dist"

Removing the default install task

If you do not want to run the default install task on deploy:updated, (for example, if you do not have root level dependencies stored in a composer.json you can remove it by adding the following line to your config/deploy.rb:


You can then call composer.install task within your own defined tasks, at an appropriate juncture.


  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request