在远程服务器上执行rake任务

生产环境的物理体系结构包括几台执行不同作业的机器(rake任务),所有这些机器都在同一个数据库上。

其中一个作业会对通常会返回postgres死锁的表执行大型UPDATE ,如果其他作业正在运行。

我已经有一个rake任务来优雅地停止其他作业,但我只能从本地机器执行它。

我想要达到的是:

task :big_update => :environment do
  stop_tasks_on_another_servers

  # do the SQL UPDATE
  ...
end

其中stop_tasks_on_another_servers应在其他服务器上执行rake task

我最好的尝试是使用https://github.com/capistrano/sshkit gem。 卡皮斯特拉诺使用它,但我仍然在这里失去了一步。 我在生产机器的rails控制台上尝试以下操作:

require 'sshkit/dsl'
hosts = ['machine1', 'machine2']

on hosts do
  within "/home/me/project/current" do
    with rails_env: :production do
      rake "stop_tasks"
    end
  end
end

但它返回:

INFO [70a0610a] Running /usr/bin/env rake stop_tasks on machine1
SSHKit::Command::Failed: rake stdout: Nothing written

我错过了什么或有没有更简单的方法来执行远程任务?


检查Rake远程任务。 下面是一段代码,告诉你它是如何工作的:

require 'rake/remote_task'

set :domain, 'abc.example.com'

remote_task :foo do
  run "ls"
end

我已经使用这种方法取得了成功:

http://gistflow.com/posts/372-execute-rake-task-on-remote-server-with-capistrano

链接地址: http://www.djcxy.com/p/17903.html

上一篇: Execute a rake task on a remote server

下一篇: library not found for lcrypto