我在 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 手动运行它,也会发生这种情况。我在具有 sudo 权限和 root 组的非 root 用户下运行所有这些。
我的 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
cd
不是可执行文件;它是 shell 内置的,因此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 进行替换,或者使用$SHELL
已设置好的 shell。