簡體   English   中英

在遠程服務器上執行rake任務

[英]Execute a rake task on a remote server

生產環境的物理體系結構包括多個執行不同作業的機器(rake任務),所有這些機器都在同一個數據庫中。

其中一個作業會對表執行大量UPDATE ,如果其他作業正在運行,該表通常會返回postgres死鎖。

我已經有一個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 Remote Task 這是一個片段,向您展示它是如何工作的:

require 'rake/remote_task'

set :domain, 'abc.example.com'

remote_task :foo do
  run "ls"
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM