有一些deploy.rb:
namespace :deploy do
desc 'Restart application'
task :restart do
on roles(:app), in: :sequence, wait: 5 do
# Your restart mechanism here, for example:
# execute :touch, release_path.join('tmp/restart.txt')
sudo "service nginx restart"
end
end
after :publishing, :restart
end
如您所见,我想在发布后重新启动我的Nginx服务器。但是我收到以下错误:
cap aborted!
SSHKit::Command::Failed: sudo exit status: 1
sudo stdout: Nothing written
sudo stderr: sudo: no tty present and no askpass program specified
据我所知,我需要为sudo命令指定密码;但是我没有在代码中存储密码,我使用SSH来实现它。我错了吗?我该如何解决?提前致谢。
答案 0 :(得分:6)
Capistrano 3不支持带密码的sudo,并且您不能在Capistrano任务中使用带密码的sudo,只能使用Capistrano 3 gem。
但是,我创建了一个gem sshkit-sudo,这是一个带密码输入的sudo的SSHKit扩展(Capistrano 3依赖于SSHKit)。
将gem 'sshkit-sudo'
添加到应用程序的Gemfile bundle install
,然后将require 'sshkit/sudo'
添加到应用程序的Capfile中。
然后您的代码将无需更改即可运行。