namespace :load do task :defaults do set :composer_roles, :all set :composer_download_url, "https://getcomposer.org/installer" set :composer_install_flags, "--no-dev --prefer-dist --no-interaction --optimize-autoloader" end end namespace :composer do desc "检查 Composer 是否已安装" task :check do on release_roles(fetch(:composer_roles)) do next if test("[ -f #{deploy_path}/.dep/composer.phar ]") composer_version = fetch(:composer_version, nil) composer_version_flag = composer_version ? "-- --version=#{composer_version}" : "" execute :mkdir, "-p", "#{deploy_path}/.dep" execute :curl, "-sS", fetch(:composer_download_url), "|", :php, composer_version_flag execute :mv, "composer.phar #{deploy_path}/.dep/composer.phar" end end desc "执行 Composer 命令" task :run, :command do |t, args| args.with_defaults(:command => :list) on release_roles(fetch(:composer_roles)) do within release_path do execute :php, "#{deploy_path}/.dep/composer.phar", args[:command], *args.extras end end end desc "安装应用依赖" task :install do invoke "composer:run", :install, fetch(:composer_install_flags) end after "deploy:started", "composer:check" end