在Capistrano的Rails 4中重启Sudo命令

时间:2014-05-21 11:14:55

标签: ruby-on-rails nginx

有一些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来实现它。我错了吗?我该如何解决?提前致谢。

1 个答案:

答案 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中。

然后您的代码将无需更改即可运行。