ruby-on-rails - 在远程服务器上执行 rake 任务

标签 ruby-on-rails ruby rake multiserver

生产环境的物理架构包括多台机器执行不同的工作(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 任务

我最好的尝试是使用 https://github.com/capistrano/sshkit gem 。与 Capistrano 使用的相同,但我仍然缺少这里的一步。 我正在生产机器的 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

关于ruby-on-rails - 在远程服务器上执行 rake 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20615329/

相关文章:

ruby-on-rails - 运行 rails rake : test in Parallel (on multiple cores/speeding it up) using Miniest

ruby-on-rails-4 - PG::ConnectionBad:将 rails 从 4.2 升级到 5.2 后连接关闭

ruby-on-rails - Rails 部分空集合

jquery - Ruby On Rails jQuery AJAX 帖子

ruby-on-rails - Rails 键值数组到表

ruby - 根据数组在另一个数组中的存在情况对数组重新排序

ruby-on-rails - Git 工作流两个开发人员远程,最佳实践?

html - 如何使用 Material 设计或自定义 CSS 设置 simple_form 的样式

ruby-on-rails - 如何在 Ruby on Rails 中加入嵌套的 own_to

ruby - 要求不在规范内工作