如何从远程服务器本地 运行 Capistrano 任务?
How to run Capistrano task locally from remote server?
用例:
假设我定义了一个 Capistrano 任务,例如 cap resque:start
.
它需要 :set
值,例如我的 deploy.rb
.
中的工人数量
假设我想在服务器重启时启动 resque worker。
我可以将它们复制粘贴到一些 post-reboot 脚本中,但是如果我更改 :set
工作人员数量或其他配置,我将需要更改 post-reboot 脚本也是如此。
相反,我们可以在 post-reboot 脚本中执行 cap locally:resque:start
,这将自动占用我们在 deploy.rb
.
- 在 Gemfile 中,添加从
:development
到 :production
的所有 Capistrano gem
创建任务cap locally:resque:start
:
namespace :locally do
namespace :resque do
task :start do
run_locally { Rake::Task["resque:start"].execute }
end
end
end
将远程主机添加到远程主机上的 authorized_keys
(因为 Capistrano 3 需要阶段设置,即使我们在本地执行任务也是如此。幸运的是,到本地主机的 ssh 连接会很快):
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod og-wx ~/.ssh/authorized_keys
现在,在您的远程生产服务器上,cap production locally:resque:start
。
用例:
假设我定义了一个 Capistrano 任务,例如 cap resque:start
.
它需要 :set
值,例如我的 deploy.rb
.
中的工人数量
假设我想在服务器重启时启动 resque worker。
我可以将它们复制粘贴到一些 post-reboot 脚本中,但是如果我更改 :set
工作人员数量或其他配置,我将需要更改 post-reboot 脚本也是如此。
相反,我们可以在 post-reboot 脚本中执行 cap locally:resque:start
,这将自动占用我们在 deploy.rb
.
- 在 Gemfile 中,添加从
:development
到:production
的所有 Capistrano gem
创建任务
cap locally:resque:start
:namespace :locally do namespace :resque do task :start do run_locally { Rake::Task["resque:start"].execute } end end end
将远程主机添加到远程主机上的
authorized_keys
(因为 Capistrano 3 需要阶段设置,即使我们在本地执行任务也是如此。幸运的是,到本地主机的 ssh 连接会很快):ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod og-wx ~/.ssh/authorized_keys
现在,在您的远程生产服务器上,
cap production locally:resque:start
。