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 20121124202614
ser 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 $PATH
semelhante ou o que quiser e torne-o executável:~/bin
version_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.