如何从远程服务器本地 运行 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.

  1. Gemfile 中,添加从 :development:production
  2. 的所有 Capistrano gem
  3. 创建任务cap locally:resque:start

    namespace :locally do
      namespace :resque do
        task :start do
          run_locally { Rake::Task["resque:start"].execute }
        end
      end
    end
    
  4. 将远程主机添加到远程主机上的 authorized_keys(因为 Capistrano 3 需要阶段设置,即使我们在本地执行任务也是如此。幸运的是,到本地主机的 ssh 连接会很快):

    1. ssh-keygen -t rsa
    2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    3. chmod og-wx ~/.ssh/authorized_keys
  5. 现在,在您的远程生产服务器上,cap production locally:resque:start