ruby – Capistrano 3 – 错误:抱歉,你必须有一个tty才能运行sudo

我刚刚将Capistrano从v2升级到v3.1.

我重写了我的任务,包括运行一个重启Nginxshell脚本.要重新启动Nginx,我必须以sudo身份运行,这会导致错误

Sorry,you must have a TTY to run sudo

在Capistrano 2中,要解决此问题,我添加到我的Capfile中:

default_run_options [:pty] = true

Capistrano v3的等价物是什么?

我的deploy.rb文件如下所示:

# config valid only for Capistrano 3.1
lock '3.1.0'

set :application,'APP_NAME'

namespace :deploy do

  desc 'Restart Nginx'
  task :restart do

    on roles(:app),in: :sequence,wait: 5 do
       execute :sudo,"./restart.sh"
    end
  end

end

解决方法

解决此问题,我需要将set:pty,true添加到我的deploy.rb文件中.我不得不在几个地方挖掘才能找到这个答案所以我想我会分享其他人有同样的问题.

更新了deploy.rb文件

# config valid only for Capistrano 3.1
lock '3.1.0'

set :application,'APP_NAME'
set :pty,true

namespace :deploy do

  desc 'Restart Nginx'
  task :restart do
    on roles(:app),wait: 1 do
       execute :sudo,"./restart.sh"
    end
  end

end

要在不提示输入密码的情况下进行连接,您需要设置SSH密钥.我的production.rb和staging.rb看起来像这样:

set :stage,:production

role :app,%{ec2-000-000-000-000.eu-west-1.compute.amazonaws.com}

set :ssh_options,{
    user: 'ubuntu',keys: %w(/path/to/key/file/my_access_key.pem),forward_agent: false
}

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...