Class: Ridgepole::ReplaceDbTask::Executor

Inherits:
Object
  • Object
show all
Defined in:
lib/ridgepole/replace_db_task/executor.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rails_env, options, block) ⇒ Executor

Returns a new instance of Executor.



40
41
42
43
44
# File 'lib/ridgepole/replace_db_task/executor.rb', line 40

def initialize(rails_env, options, block)
  @rails_env = rails_env
  @options = options
  @block = block
end

Class Method Details

.call(rails_env, options, block) ⇒ Object



4
5
6
# File 'lib/ridgepole/replace_db_task/executor.rb', line 4

def self.call(rails_env, options, block)
  new(rails_env, options, block).call
end

Instance Method Details

#callObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/ridgepole/replace_db_task/executor.rb', line 8

def call
  raise 'config.database_yml_path is required.' if Ridgepole::ReplaceDbTask.config.database_yml_path.blank?
  raise 'config.schema_file_path is required.' if Ridgepole::ReplaceDbTask.config.schema_file_path.blank?

  command = <<~EOD
    #{Ridgepole::ReplaceDbTask.config.ridgepole} \
      -c #{Ridgepole::ReplaceDbTask.config.database_yml_path} \
      -f #{Ridgepole::ReplaceDbTask.config.schema_file_path} \
      #{ignore_tables_option} \
      #{skip_drop_table_option} \
      #{@options} \
      -E #{@rails_env}
EOD
  puts command

  out = []
  is_success = Open3.popen2e(command) do |stdin, stdout_and_stderr, wait_thr|
    stdin.close

    stdout_and_stderr.each_line do |line|
      out << line
      @block.call(line)
    end

    wait_thr.value.success?
  end

  out.join("\n")

  exit(1) unless is_success
end