Rails 多分片:如何让作业命中特定分片

问题描述 投票:0回答:1

我正在使用 Rails 6.1 的水平分片功能,效果很好。

我正在使用将子域路由到正确分片的概念,因此我的 multi_db.rb 配置如下所示:

Rails.application.configure do
  config.active_record.shard_selector = { lock: true }
  config.active_record.shard_resolver = ->(request) {
# I only have 2 shards, primary (english) and one in spanish:
    return request.subdomain == "es" ? "spanish": "primary"
  }
end

如果我点击某些 URL,例如:

es.mycompany.com
,代码将正确路由到“西班牙”分片。如果我点击
mycompany.com
,它就会进入主要页面。

但是现在我有一个工作想要在特定的分片中运行。据我所知,当作业运行时,上面的代码不会被调用,并且考虑到“请求”参数,这是有意义的;看起来它只是根据某个控制器的请求调用的。

但是对于作业,不涉及控制器,那么如何“挂钩”作业的分片选择呢?

ruby-on-rails jobs sharding ruby-on-rails-7
1个回答
0
投票

事实证明这相当简单:

def perform(shard)
  ActiveRecord::Base.connected_to(shard: shard) do
    # Job code
  end
end

这假设您在开始工作时知道分片(这是我的情况)。

© www.soinside.com 2019 - 2024. All rights reserved.