dca*_*iro 7 ruby rake ruby-on-rails multiserver
生产环境的物理体系结构包括多个执行不同作业的机器(rake任务),所有这些机器都在同一个数据库中.
UPDATE如果其他作业正在运行,其中一个作业会在一个表上做大,通常会返回一个postgres死锁.
我已经有一个rake任务来优雅地停止其他作业,但我只能从本地机器上执行它.
我想要实现的是:
task :big_update => :environment do
stop_tasks_on_another_servers
# do the SQL UPDATE
...
end
Run Code Online (Sandbox Code Playgroud)
stop_tasks_on_another_servers应该rake task在其他服务器上执行a .
我最好的尝试是使用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
Run Code Online (Sandbox Code Playgroud)
但它返回:
INFO [70a0610a] Running /usr/bin/env rake stop_tasks on machine1
SSHKit::Command::Failed: rake stdout: Nothing written
Run Code Online (Sandbox Code Playgroud)
我缺少什么或者有更简单的方法来执行远程任务?
查看Rake 远程任务。这是一个向您展示其工作原理的片段:
require 'rake/remote_task'
set :domain, 'abc.example.com'
remote_task :foo do
run "ls"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2963 次 |
| 最近记录: |