sidekiq-activerecord-shard 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2e44ce2e8eb14ffe2a5d28c3e09ded3aab7e90b113be16e9599c483e24880c6
4
- data.tar.gz: '08cc893a7882520acd9a57e5d71e6166e635da77ca6c5e305e2789cf689c0a34'
3
+ metadata.gz: e5b2f3dd951bd57abc6d8c9751398ca0d1ce7463d9349afc3471bb3d9f1314d4
4
+ data.tar.gz: a2669c8431a5cb6c45bccb44f79b8c9efecbef1ed5e90e28c8b6f3551b499484
5
5
  SHA512:
6
- metadata.gz: 6073afb41c1ff90745b5084e2a7482586c0fd7262d2152c42957635778cfdfd48fe5c343ebea5d69af721879d90f0a53923e7d8e58085c0d9ff61672a2c0075e
7
- data.tar.gz: 0ee0dd719e024ca5559e1b8ce70159c806775b7ea4f9ae7851874990857e379aa54c10018a79b69c28d9fc007e98f797f61c6d4a602b1569048f235e0af5dee4
6
+ metadata.gz: 903d26936d8030a9a80308dd4c4b7eb135f284acfe08d853640d8a11c7b5895eaa7ce16033e1d80cb45dd38edff388166fc5605cf65b3a0293793326575120b3
7
+ data.tar.gz: 6bf6bdc902d59eebbc320ae7b84f1086a861c2786aa230664e951b52247dd5f7b88acc93b1c62ba50176d38d477941819bae4ee06e1500dc5001a8a62adeaf88
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A Sidekiq middleware for supports ActiveRecord Shard with [ActiveSupport:CurrentAttribute](https://api.rubyonrails.org/classes/ActiveSupport/CurrentAttributes.html).
4
4
 
5
+ > NOTE: This gem can work with sidekiq-cron or other schedulers, because when Schedule perform a job, it can't know the shard name.
6
+
5
7
  ## Installation
6
8
 
7
9
  Add this line to your application's Gemfile:
@@ -23,10 +25,10 @@ Add follow code into `config/initializers/sidekiq-activerecord-shard.rb`:
23
25
  SidekiqActiveRecordShard.configure do
24
26
  self.selected_shard = -> do
25
27
  case Current.tenant_id
26
- when "company1"
27
- :company1
28
+ when "other"
29
+ :other
28
30
  else
29
- :default
31
+ :primary
30
32
  end
31
33
  end
32
34
  end
@@ -52,6 +54,20 @@ class ApplicationController < ActionController::Base
52
54
  end
53
55
  ```
54
56
 
57
+ ### Perform Job by set shared
58
+
59
+ Some times, you want to perform a job without Request context, or start Job in schedulers.
60
+
61
+ Now use can use `set(shard: "hard_name")` to set shared in directly.
62
+
63
+ ```rb
64
+ # Call job with "other" shard db
65
+ MyJob.set(shard: "other").perform_later
66
+
67
+ # Call job with "primary" shard db
68
+ MyJob.set(shard: "primary").perform_later
69
+ ```
70
+
55
71
  ## Contributing
56
72
 
57
73
  Contribution directions go here.
@@ -2,11 +2,12 @@ require "sidekiq"
2
2
 
3
3
  module SidekiqActiveRecordShard
4
4
  class Client
5
- include ::Sidekiq::ClientMiddleware
5
+ include Sidekiq::ClientMiddleware
6
6
 
7
7
  def call(_jobclass, job, _queue, _redis)
8
8
  # Store shard value in Job arguments
9
- job["_active_record_shard"] = SidekiqActiveRecordShard.selected_shard.call
9
+ job["shard"] ||= SidekiqActiveRecordShard.config.selected_shard.call
10
+
10
11
  yield
11
12
  end
12
13
  end
@@ -14,12 +15,16 @@ module SidekiqActiveRecordShard
14
15
  class Server
15
16
  include Sidekiq::ServerMiddleware
16
17
  def call(_jobclass, job, _queue, &block)
17
- set_shard(job["_active_record_shard"], &block)
18
+ if job["shard"].nil?
19
+ yield
20
+ else
21
+ set_shard(job["shard"], &block)
22
+ end
18
23
  end
19
24
 
20
25
  # Inspired by ActiveRecord::Middleware::ShardSelector
21
26
  # https://github.com/rails/rails/blob/v7.0.3/activerecord/lib/active_record/middleware/shard_selector.rb#L54
22
- def set_shard(shared, &block)
27
+ def set_shard(shard, &block)
23
28
  options = Rails.application.config.active_record.shard_selector
24
29
 
25
30
  ActiveRecord::Base.connected_to(shard: shard.to_sym) do
@@ -1,3 +1,3 @@
1
1
  module SidekiqActiveRecordShard
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-activerecord-shard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Lee