Module: Octopus::Migration
- Defined in:
- lib/octopus/migration.rb
Class Method Summary collapse
Instance Method Summary collapse
- #get_current_shard ⇒ Object
- #migrate_with_octopus(direction) ⇒ Object
- #using(*args) ⇒ Object
- #using_group(*args) ⇒ Object
Class Method Details
.extended(base) ⇒ Object
2 3 4 5 6 7 8 9 10 11 12 |
# File 'lib/octopus/migration.rb', line 2 def self.extended(base) class << base def announce_with_octopus() announce_without_octopus("#{} - #{get_current_shard}") end alias_method_chain :migrate, :octopus alias_method_chain :announce, :octopus attr_accessor :current_shard end end |
Instance Method Details
#get_current_shard ⇒ Object
45 46 47 |
# File 'lib/octopus/migration.rb', line 45 def get_current_shard "Shard: #{ActiveRecord::Base.connection.current_shard()}" if ActiveRecord::Base.connection.respond_to?(:current_shard) end |
#migrate_with_octopus(direction) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/octopus/migration.rb', line 50 def migrate_with_octopus(direction) conn = ActiveRecord::Base.connection return migrate_without_octopus(direction) unless conn.is_a?(Octopus::Proxy) self.connection().current_shard = self.current_shard if self.current_shard != nil groups = conn.instance_variable_get(:@groups) begin if conn.current_group.is_a?(Array) conn.current_group.each { |group| conn.send_queries_to_multiple_shards(groups[group]) { migrate_without_octopus(direction) } } elsif conn.current_group.is_a?(Symbol) conn.send_queries_to_multiple_shards(groups[conn.current_group]) { migrate_without_octopus(direction) } elsif conn.current_shard.is_a?(Array) conn.send_queries_to_multiple_shards(conn.current_shard) { migrate_without_octopus(direction) } else migrate_without_octopus(direction) end ensure conn.clean_proxy() end end |
#using(*args) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/octopus/migration.rb', line 14 def using(*args) if self.connection().is_a?(Octopus::Proxy) args.each do |shard| self.connection().check_schema_migrations(shard) end self.connection().block = true self.current_shard = args self.connection().current_shard = args end return self end |
#using_group(*args) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/octopus/migration.rb', line 28 def using_group(*args) if self.connection().is_a?(Octopus::Proxy) args.each do |group_shard| shards = self.connection().instance_variable_get(:@groups)[group_shard] || [] shards.each do |shard| self.connection().check_schema_migrations(shard) end end self.connection().block = true self.connection().current_group = args end return self end |