Capistrano deploy how to use use_sudo and admin_runner
Asked Answered
B

1

6

I'm trying to configure Capistrano so that it works for our server setup. We are deploying symfony projects so i'm also using capifony. I'm still experiencing some problems with permissions.

On our server every project runs as a project user, so every project has it's own user. So i configured use_sudo and set it to true and i configured the admin_runner to be the user of the project. But it still didn't work so i modified the capifony to start using try_sudo in stead of the regular run. Which made it work a little bit better. But i'm a bit confused about what to use in which case. You have try_sudo, sudo and run. But which is needed for which use-case?

  • When you use run i think it'll always be your local user
  • try_sudo i think will check if the use_sudo flag is true if so it will use the sudo command if not it will use the local user. If you have admin_runner configured it will sudo to the user configured as admin_runner
  • sudo will always try to sudo

Now my problem is the deploy:symlink method this is also just a regular run command so it executes as the local user, which gives permission problems when i try to view the website.

So can anyone tell me if my description of the 3 commands is correct? and also does anyone know how the admin_runner and use_sudo is suposed to be used, so that the symlink is also being done correctly (and also all other commands done by capistrano)?

kind regards,

Daan

Bohman answered 5/12, 2011 at 15:56 Comment(1)
Note that capifony doesn't take care of :use_sudo or admin_runner yet.Aalii
F
4

Apologies for such a tardy answer Daan. Your understanding of Capistrano is correct. Note also that the :use_sudo flag defaults to true.

In Capistrano 2.11.2, you'll find lib/capistrano/configuration/variables.rb:

_cset(:run_method)        { fetch(:use_sudo, true) ? :sudo : :run }

and lib/capistrano/recipes/deploy.rb:

def try_sudo(*args)
  options = args.last.is_a?(Hash) ? args.pop : {}
  command = args.shift
  raise ArgumentError, "too many arguments" if args.any?

  as = options.fetch(:as, fetch(:admin_runner, nil))
  via = fetch(:run_method, :sudo)
  if command
    invoke_command(command, :via => via, :as => as)
  elsif via == :sudo
    sudo(:as => as)
  else
    ""
  end
end

Perhaps your permissions problem involves your server, running as a normal user, not being able to read the contents of the release directory that your current symlink is pointing to?

Flywheel answered 2/3, 2012 at 15:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.