7

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

我已经重新编写了我的任务,其中包括运行一个 shell 脚本来重新启动 NGINX 等等。要重新启动 NGINX,我必须运行sudo导致错误的原因:

抱歉,您必须有 TTY 才能运行 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
4

1 回答 1

13

为了解决这个问题,我需要添加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), in: :sequence, 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
}
于 2014-01-24T11:27:17.857 回答