Module: MysqlOnlineMigrations

Defined in:
lib/mysql_online_migrations.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.prepended(base) ⇒ Object



10
11
12
13
# File 'lib/mysql_online_migrations.rb', line 10

def self.prepended(base)
  ActiveRecord::Base.send(:class_attribute, :mysql_online_migrations, :instance_writer => false)
  ActiveRecord::Base.send("mysql_online_migrations=", true)
end

Instance Method Details

#connectionObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/mysql_online_migrations.rb', line 15

def connection
  original_connection = super
  adapter_mode = original_connection.class.name == "ActiveRecord::ConnectionAdapters::Mysql2Adapter"

  @original_adapter ||= if adapter_mode
    original_connection
  else
    original_connection.instance_variable_get(:@delegate)
  end

  @no_lock_adapter ||= ActiveRecord::ConnectionAdapters::Mysql2AdapterWithoutLock.new(@original_adapter)

  if adapter_mode
    @no_lock_adapter
  else
    original_connection.instance_variable_set(:@delegate, @no_lock_adapter)
    original_connection
  end
end

#with_lockObject



35
36
37
38
39
40
# File 'lib/mysql_online_migrations.rb', line 35

def with_lock
  original_value = ActiveRecord::Base.mysql_online_migrations
  ActiveRecord::Base.mysql_online_migrations = false
  yield
  ActiveRecord::Base.mysql_online_migrations = original_value
end