Como criar uma tarefa do Capistrano para importar um backup da produção para o db de desenvolvimento local?

2

Estou tentando fazer algo com uma tarefa do Capistrano que seja semelhante à funcionalidade heroku db:pull se você estiver familiarizado com ela.

Eu tenho um servidor remoto. Nesse servidor eu tenho um monte de backups na pasta /path/db_backups/ . E nessa pasta há um backup do banco de dados todos os dias.

Tudo o que quero fazer é

  1. Faça o download do backup mais recente na máquina cliente em / path / to / backups_dir /
  2. Descompacte localmente.
  3. Importe-o para o banco de dados local mysql.

Alguém sabe de uma boa maneira de lidar com isso? Existe uma jóia que eu não conheço? Existe um script que você tenha à mão?

    
por Daniel Fischer 04.12.2012 / 01:31

1 resposta

0

este é um tema bastante antigo, mas eis como liduei com o Capistrano 3.

Isto irá usar o seu binário MySQL remoto (por exemplo, aquele do seu servidor web). Você não precisará de um acesso direto ao servidor MySQL, mas o MySQL binário deve estar instalado em seu servidor remoto.

# ensure that the dump directory exists
%x{mkdir -p #{dump_dir}}

# run mysqldump command to backup the db from the remote server
args = "-u#{db_user} -p#{db_pass} -h#{db_host} #{db_name}"
dump = []

if fetch(:answer)== 'overwrite' then true else false end
# stream the output to local
output = capture(:mysqldump, args)
output.each_line do |line|
  dump << line
end

# write the streamed output to a file
File.open("#{dump_dir}/#{db_name}_#{stage}_#{date}.sql", 'w') do |file|
  file.puts(dump)
end

Em seguida, importe para qualquer banco de dados MySQL com % x

%x{mysql -u#{local_db_user} -p#{local_db_pass} -h#{local_db_host} #{local_db_name} < #{dump_dir}/#{db_name}_#{stage}_#{date}.sql}

Espero que isso ajude alguém.

    
por 09.01.2018 / 15:24