在Capistrano的Rails 4中重启Sudo命令

mal*_*uri 0 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
Run Code Online (Sandbox Code Playgroud)

如您所见,我想在发布后重新启动我的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
Run Code Online (Sandbox Code Playgroud)

据我所知,我需要为sudo命令指定密码; 但我没有在代码中存储密码,我使用SSH.我错了吗?我该如何解决?提前致谢.

Ken*_*mai 7

Capistrano 3不支持带密码的sudo,并且你不能在只有Capistrano 3 gem的Capistrano任务中使用带密码的sudo.

但是,我创建了一个gem,sshkit-sudo,这是一个带密码输入的sudo的SSHKit扩展(Capistrano 3依赖于SSHKit).

添加gem 'sshkit-sudo'到应用程序的Gemfile,bundle install并添加require 'sshkit/sudo'到应用程序的Capfile中.

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