[英]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.