Atualizar versão em migrações de trilhos

Se você precisar alterar a versão em um arquivo de migração, há uma maneira fácil de fazer isso:

mv {20121124202614,$(date +%Y%m%d%H%M%S)}_my_migration.rb

Por 20121124202614ser a versão de migração atual.

Mas parece muito longo para escrever e não é muito útil do jeito que está escrito agora.

Podemos escrever um pequeno script ruby ​​para lidar com isso para nós, algo como isso vai servir.

#!/usr/bin/env ruby

require 'fileutils'

ARGV
.each_with_index do |file, index|
next unless File.exists?( file )

filename_arr
= File.basename( file ).split '_'

# Make sure to add a couple of seconds
new_version
= Time.now.strftime( '%Y%m%d%H%M%S' ).to_i + index

# Change the version
filename_arr
[0] = new_version
new_name
= filename_arr.join '_'

new_file
= File.join File.dirname( file ), new_name

# Rename in filesystem
FileUtils.mv file, new_file
end

Coloque-o em algum lugar com o seu nome $PATHsemelhante ou o que quiser e torne-o executável:~/binversion_change

chmod 755 ~/bin/version_change

Agora temos algumas vantagens que não tínhamos antes:

  • Podemos atualizar vários arquivos como este:

ls db/migrate/* | xargs version_change

  • A lista pode estar em qualquer ordem que precisemos e o script respeitará essa ordem:

version_change 002_latest.rb 001_first.rb

  • Ruby é uma linguagem muito legal, então atualizar o script agora é uma brisa.
  • Você pode atualizar os nomes de arquivos de qualquer arquivo que siga o mesmo formato que as migrações do Rails fazem.