3

Я использую CentOS VPS и использую RVM и Capistrano для развертывания. для некоторых развертываний мне нужно использовать sudo, но когда я развертываю что-то вроде:

desc "Restart the application services"
task :restart, :roles => :app do
  run "#{sudo} cd #{current_path} && bundle exec foreman export upstart"
end

Я получаю: sudo: bundle: command not found . это происходит, даже если я запускаю его вручную через SSH. Я запускаю все это от имени пользователя без полномочий root с привилегиями sudo и корневой группой.

Мой файл sudoers выглядит так:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

root    ALL=(ALL)    ALL
deploy  ALL=(ALL)  ALL

Я попытался изменить secure_path на:

/usr/local/rvm/gems/ruby-1.9.3-p392/bin:/usr/local/rvm/gems/ruby-1.9.3-p392@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p392/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rvm/bin:/root/bin

Это заставляет работать пакетную часть bundle exec но теперь он говорит, что sudo: cd: command not found

Я не уверен, что делать в этот момент, кто-нибудь знает почему?

1 ответ1

0

cd не является исполняемым файлом; это встроенная оболочка, поэтому команда cd: command not found . Вы также не цитируете свою полную команду sudo , поэтому sudo запускает только часть перед && . Попробуй это:

desc "Restart the application services"
  task :restart, :roles => :app do
    run "#{sudo} sh -c 'cd #{current_path} && bundle exec foreman export upstart'"
  end
end

Вы можете заменить sh любой оболочкой, которую вы предпочитаете, или использовать $SHELL если она установлена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .