ajt*_*rds 7 ruby capistrano capistrano3
我刚刚将Capistrano从v2升级到v3.1.
我重写了我的任务,包括运行一个重启NGINX的shell脚本.要重新启动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
Run Code Online (Sandbox Code Playgroud)
ajt*_*rds 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
Run Code Online (Sandbox Code Playgroud)
要在不提示输入密码的情况下进行连接,您需要设置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
}
Run Code Online (Sandbox Code Playgroud)