cri*_*imi 30 capistrano ruby-on-rails capistrano3
我想用Capistrano 3编写一个配方,用sudo在远程服务器上执行任务.
使用Capistrano 2,可以这样做:
default_run_options[:pty] = true
task :hello do
run "#{sudo} cp ~/something /something"
end
Run Code Online (Sandbox Code Playgroud)
有了Capistrano 3,我发现:
set :pty, true
Run Code Online (Sandbox Code Playgroud)
但我无法执行使用sudo运行的任务.
如何使用sudo运行任务?
小智 20
Capistrano 3指南建议使用无密码的sudo.这允许您较少的用户执行sudo命令,而无需通过PTY输入密码.
您可以使用Kentaro在上面编写的任务,并在/ etc/sudoers文件中添加以下内容:
deploy ALL=NOPASSWD:/bin/cp ~/something /something
Run Code Online (Sandbox Code Playgroud)
http://www.capistranorb.com/documentation/getting-started/authentication-and-authorisation/#toc_8
Ken*_*mai 15
我通常这样写:
task :hello do
on roles(:all) do |host|
execute :sudo, :cp, '~/something', '/something'
end
end
Run Code Online (Sandbox Code Playgroud)
编辑
Capistrano 3不支持带密码的sudo.
但是,我创建了一个小宝石,它允许您在Capistrano 3任务中使用带密码的sudo.
将sshkit-sudo添加到应用程序的Gemfile:
# Gemfile
gem 'sshkit-sudo'
Run Code Online (Sandbox Code Playgroud)
在你的Capfile中要求'sshkit/sudo':
# Capfile
require 'sshkit/sudo'
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用sudo执行命令,如下所示:
task :hello do
on roles(:all) do
sudo :cp, '~/something', '/something'
end
end
Run Code Online (Sandbox Code Playgroud)
ajt*_*rds 14
要解决此问题,我需要添加set :pty, true到我的deploy.rb文件中.
我现在可以运行以下内容:
# config valid only for Capistrano 3.1
lock '3.1.0'
set :application, 'APP_NAME'
set :pty, true
set :ssh_options, {:forward_agent => 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)
此任务基本上运行一个调用的shell脚本restart.sh,其中包含一个命令sudo service nginx restart.
| 归档时间: |
|
| 查看次数: |
24764 次 |
| 最近记录: |