namespace :foreman do desc <<-DESC Export the Procfile to upstart. You can override any of these defaults by setting the variables shown below. set :foreman_cmd, "foreman" set :foreman_format, "upstart" set :foreman_location, "/etc/init" set :foreman_port, 5000 set :foreman_root, -> { release_path } set :foreman_procfile, -> { release_path.join('Procfile') } set :foreman_app, -> { fetch(:application) } set :foreman_log, -> { shared_path.join('log') } set :foreman_pids, false set :foreman_concurrency, false set :foreman_sudo, false set :foreman_roles, :all set :foreman_servers, -> { release_roles(fetch(:foreman_roles)) } DESC task :export do on fetch(:foreman_servers) do |host| within release_path do foreman_cmd = fetch(:foreman_cmd) foreman_concurrency = fetch(:foreman_concurrency) foreman_format = fetch(:foreman_format) foreman_location = fetch(:foreman_location) foreman_pids = fetch(:foreman_pids) foreman_sudo = fetch(:foreman_sudo) foreman_user = fetch(:foreman_user, host.user) cmd = [foreman_cmd, 'export', foreman_format, foreman_location] cmd << %Q(-f #{fetch(:foreman_procfile)}) cmd << %Q(-p #{fetch(:foreman_port)}) cmd << %Q(-d #{fetch(:foreman_root)}) cmd << %Q(-a #{fetch(:foreman_app)}) cmd << %Q(-u #{foreman_user}) cmd << %Q(-l #{fetch(:foreman_log)}) cmd << %Q(-r #{foreman_pids}) if foreman_pids cmd << %Q(-c #{foreman_concurrency}) if foreman_concurrency execute *cmd end end end desc 'Prefixes the foreman command with sudo when :foreman_sudo => true' task :configure_sudo do if fetch(:foreman_sudo) foreman_cmd = fetch(:foreman_cmd).to_s SSHKit.config.command_map.prefix[foreman_cmd].push('sudo') end end end Capistrano::DSL.stages.each do |stage| after stage, 'foreman:configure_sudo' end namespace :load do task :defaults do set :foreman_cmd, "foreman" set :foreman_format, "upstart" set :foreman_location, "/etc/init" set :foreman_port, 5000 set :foreman_root, -> { release_path } set :foreman_procfile, -> { release_path.join('Procfile') } set :foreman_app, -> { fetch(:application) } set :foreman_log, -> { shared_path.join('log') } set :foreman_pids, false set :foreman_concurrency, false set :foreman_sudo, false set :foreman_roles, :all set :foreman_servers, -> { release_roles(fetch(:foreman_roles)) } end end namespace :deploy do after :updated, 'foreman:export' end